node.js – Kubernetes – Ingress / Service / LB.

我是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,我在部署时完全像在示例中那样创建但是仍然没有从端点获得任何内容. API可从服务外部IP访问,但..

非常感谢

最佳答案 我再次调查它,并认为我弄清楚了.

为了使Ingress能够在GCE上工作,您需要将NodePort的后端服务定义为ClusterIP或LoadBalancer.

此外,您需要确保http运行状况检查/工作(您将看到Google L7 Loadbalancer在该网址上大量点击您的服务)然后它可用.

点赞