将运行状况检查主机标头添加到Ingress

时间:2019-09-06 13:52:31

标签: kubernetes google-kubernetes-engine kubernetes-ingress

我正在GKE中运行Kubernetes,并且为我的一项服务创建了一个默认入口,但是我无法访问我的服务,因为入口默认运行状况检查(当查询根目录时,它会收到200个返回码路径:/)不起作用。

这样做的原因是我的服务正在根路径(/)上返回400,因为它希望接收到带有特定Host标头的请求,例如:Host: my-api.com 。如何配置我的入口以将此标头添加到根健康检查中?

注意:我设法在GCP控制台中进行了配置,但是我想知道如何在yaml上进行配置,这样,如果必须重新创建入口,就不必记住要这样做了。

入口:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  namespace: backend
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "backend"
    networking.gke.io/managed-certificates: "api-certificate"
spec:
  rules:
  - host: my-api.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: backend-service
          servicePort: http

服务:

---
apiVersion: v1
kind: Service
metadata:
  name: backend-service
  namespace: backend
  annotations:
    beta.cloud.google.com/backend-config: '{"ports": {"80":"backend-web-backend-config"}}'
spec:
  selector:
    app: backend-web
  ports:
  - name: http
    targetPort: 8000
    port: 80
  type: NodePort

后端配置:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: backend-web-backend-config
  namespace: backend
spec:
  timeoutSec: 120

部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: backend-web
  namespace: backend
  labels:
    app: backend-web
spec:
  selector:
    matchLabels:
      app: backend-web
  template:
    metadata:
      labels:
        app: backend-web
    spec:
      containers:
      - name: web
        image: backend:{{VERSION}}
        imagePullPolicy: IfNotPresent
        ports:
          - containerPort: 8000
            protocol: TCP
        command: ["run"]
        resources:
          requests:
            memory: "800Mi"
            cpu: 150m
          limits:
            memory: "2Gi"
            cpu: 1
        livenessProbe:
          httpGet:
            httpHeaders:
              - name: Accept
                value: application/json
            path: "/healthcheck"
            port: 8000
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 30
        readinessProbe:
          httpGet:
            httpHeaders:
              - name: Accept
                value: application/json
            path: "/healthcheck"
            port: 8000
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 30

1 个答案:

答案 0 :(得分:0)

您正在使用GCE Ingress,尚无法使用GCE Ingress进行此类配置。 我已经看到Google将为GKE发布一项新功能“用户定义的请求标头”,该功能使您可以指定负载均衡器添加到请求的其他标头。这项新功能将解决您的问题,但是我们将不得不等到Google发布它,并且据我所知它将在1.7版本[1]上使用。

话虽如此,剩下的只有一种选择,使用NGINX Ingress Controller代替GCE Ingress。 NGINX支持标头已更改[2],但这意味着您将不得不重新部署Ingress。

[1] https://github.com/kubernetes/ingress-gce/issues/566#issuecomment-524312141

[2] https://kubernetes.github.io/ingress-nginx/examples/customization/custom-headers/