GCE上的不健康负载均衡器

时间:2018-01-14 10:09:48

标签: kubernetes google-cloud-platform google-kubernetes-engine

我有几项服务,负载均衡器工作正常。现在我一直面临运行良好的服务的问题,但是当应用负载均衡器时,我无法使其工作,因为一个服务接缝是不可靠的,但我无法弄清楚原因。我怎样才能使这项服务健康?

enter image description here

这是我的k8s yaml。 部署:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: api-production
spec:
  replicas: 1
  template:
    metadata:
      name: api
      labels:
        app: api
        role: backend
        env: production
    spec:
      containers:
      - name: api
        image: eu.gcr.io/foobar/api:1.0.0
        livenessProbe:
          httpGet:
            path: /readinez
            port: 8080
          initialDelaySeconds: 45
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
        env:
        - name: ENVIRONMENT
          value: "production"
        - name: GIN_MODE
          value: "release"
        resources:
          limits:
            memory: "500Mi"
            cpu: "100m"
        imagePullPolicy: Always
        ports:
        - name: api
          containerPort: 8080

Service.yaml

kind: Service
apiVersion: v1
metadata:
  name: api
spec:
  selector:
    app: api
    role: backend
  type: NodePort
  ports:
  - name: http
    port: 8080
  - name: external
    port: 80
    targetPort: 80

Ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api
  namespace: production
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "gce"
spec:
  tls:
  - hosts:
    - foo.bar.io
    secretName: api-tls
  rules:
  - host: foo.bar.io
    http:
      paths:
      - path: /*
        backend:
          serviceName: api
          servicePort: 80

1 个答案:

答案 0 :(得分:1)

通过以正确的方式配置端口解决了问题。容器,服务和LB需要(显然)对齐。我还添加了initialDelaySeconds

LB:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api
  namespace: production
  annotations:
    # kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "gce"
spec:
  tls:
  - hosts:
    - api.foo.io
    secretName: api-tls
  rules:
  - host: api.foo.io
    http:
      paths:
      - path: /*
        backend:
          serviceName: api
          servicePort: 8080 

服务:

kind: Service
apiVersion: v1
metadata:
  name: api
spec:
  selector:
    app: api
    role: backend
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      name: http 

部署:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: api-production
spec:
  replicas: 1
  template:
    metadata:
      name: api
      labels:
        app: api
        role: backend
        env: production
    spec:
      containers:
      - name: api
        image: eu.gcr.io/foobarbar/api:1.0.0
        livenessProbe:
          httpGet:
            path: /readinez
            port: 8080
          initialDelaySeconds: 45
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 45
        env:
         - name: ENVIRONMENT
          value: "production"
        - name: GIN_MODE
          value: "release"
        resources:
          limits:
            memory: "500Mi"
            cpu: "100m"
        imagePullPolicy: Always
        ports:
        - containerPort: 8080