node.js - Kubernetes - 入口/服务/LB

标签 node.js kubernetes google-compute-engine google-kubernetes-engine gitlab-ci

我是 K8s 的新手,这是我第一次尝试掌握它。我正在尝试使用此 deployment.yml 设置基本的 Nodejs Express API:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - image: registry.gitlab.com/<project>/<app>:<TAG>
        imagePullPolicy: Always
        name: api
        env:
        - name: PORT
          value: "8080"
        ports:
          - containerPort: 8080
            hostPort: 80
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 30
          timeoutSeconds: 1
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 30
          timeoutSeconds: 1
      imagePullSecrets:
        - name: registry.gitlab.com

这是通过 gitlab-ci 部署的。这是有效的,我已经设置了一个服务来公开它:

apiVersion: v1
kind: Service
metadata:
  name: api-svc
  labels:
    app: api-svc
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: api
  type: LoadBalancer

但我一直在研究入口,以便为可能的多项服务提供单一入口点。我一直在阅读 Kubernetes 指南,我也阅读了这个 Kubernetes Ingress Example这是我创建的 ingress.yml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  backend:
    serviceName: api-svc
    servicePort: 80

但这没有用,当我访问从入口生成的外部 IP 地址时,我只有 502 个错误页面。

谁能指出我正确的方向,我做错了什么或者我错过了什么?我在上面的示例链接中看到有一个 nginx-rc.yml,我完全像在示例中一样部署它并且创建了它,但仍然没有从端点获得任何信息。尽管可以从服务外部 IP 访问 API..

非常感谢

最佳答案

我又看了一遍,我想我明白了。

为了让 Ingress 在 GCE 上运行,您需要将后端服务定义为 NodePort 而不是 ClusterIP 或 LoadBalancer。

此外,您还需要确保对 / 的 http 健康检查有效(您会看到 Google L7 Loadbalancer 在该 url 上多次访问您的服务)然后它就可用了。

关于node.js - Kubernetes - 入口/服务/LB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554845/

相关文章:

kubernetes - 从Kubernetes中的Pod重新启动其他节点上的Pod

node.js - 使用 NGINX 的 NodeJs 应用程序的 https 响应非常慢

session - 如何在浏览器关闭后使用 express 在 node.js 中使 session 过期?

javascript - Hook 到 Electron 中的 console.log

javascript - 无法显示快讯

ssl - 代理服务和部署之间的 Kubernetes 自定义 CA 和证书

javascript - Fetch 和 Axios 的区别

azure - 在 Azure 上的 Kubernetes 上启用 RBAC

google-app-engine - Google App Engine 可以在没有外部 IP 的情况下向同一项目中的 Compute Engine 实例发出 http 请求吗?

google-app-engine - Google Cloud Datastore 需要应用引擎吗?