Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes GKE外部负载平衡器配置,NEG';s为空,健康检查不起作用_Kubernetes_Google Cloud Platform_Google Kubernetes Engine_Gke Networking - Fatal编程技术网

Kubernetes GKE外部负载平衡器配置,NEG';s为空,健康检查不起作用

Kubernetes GKE外部负载平衡器配置,NEG';s为空,健康检查不起作用,kubernetes,google-cloud-platform,google-kubernetes-engine,gke-networking,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Gke Networking,我正在GKE中进行一个部署,这是我的第一个部署,所以我对这些概念非常陌生,但我知道它们将如何使用这些工具,只是需要有自信的经验 首先,我有一个集群,它有大约五个服务,其中两个我想通过外部负载平衡器公开。我已经为Gcloud定义了一个注释,以便在负载平衡下设置这些功能,这似乎是可行的,我还设置了一个注释,以便为服务设置网络端点组。下面是如何在部署和服务清单中进行配置的 --- #api-deployment.yaml apiVersion: apps/v1 kind: Deployment met

我正在GKE中进行一个部署,这是我的第一个部署,所以我对这些概念非常陌生,但我知道它们将如何使用这些工具,只是需要有自信的经验

首先,我有一个集群,它有大约五个服务,其中两个我想通过外部负载平衡器公开。我已经为Gcloud定义了一个注释,以便在负载平衡下设置这些功能,这似乎是可行的,我还设置了一个注释,以便为服务设置网络端点组。下面是如何在部署和服务清单中进行配置的

---
#api-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert -f ./docker-compose.yml
    kompose.version: 1.21.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: api
  name: api
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: api
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert -f ./docker-compose.yml
        kompose.version: 1.21.0 ()
      creationTimestamp: null
      labels:
        io.kompose.service: api
    spec:
      containers:
      - args:
        - bash
        - -c
        - node src/server.js
        env:
        - name: NODE_ENV
          value: production
        - name: TZ
          value: America/New_York
        image: gcr.io/<PROJECT_ID>/api
        imagePullPolicy: Always
        name: api
        ports:
        - containerPort: 8087
        resources: {}
      restartPolicy: Always
      serviceAccountName: ""
status: {}

---
#api-service.yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
    cloud.google.com/neg: '{"ingress": true}'
  creationTimestamp: null
  labels:
    io.kompose.service: api
  name: api
spec:
  type: LoadBalancer
  ports:
  - name: "8087"
    port: 8087
    targetPort: 8087
status:
  loadBalancer: {}


我的入口配置如下:

---
# master-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: master-application-ingress
  annotations:
    ingress.kubernetes.io/secure-backends: "true"
spec:
  rules:
  - http:
      paths:
      - path: /api
        backend:
          serviceName: api
          servicePort: 8087
  - http:
      paths:
      - path: /ui
        backend:
          serviceName: ui
          servicePort: 80
我看到它只需要端口,用于TCP检查,但我已经在我的应用程序和负载平衡器中定义了这些。我想我想知道我应该在哪里定义这些检查


另外,我对注释创建的NEG为空有一个问题,或者这对于清单创建的NEG是正常的吗?

健康检查是基于您的而不是livenessProbe创建的。在创建入口资源之前,确保在pod规范中配置readinessProbe

至于空的NEG,这可能是由于运行状况检查不匹配造成的。NEG将依赖准备就绪门功能(),因为您只定义了livenessProbe,所以完全有可能健康检查配置错误,因此失败


您还应该为您创建的内部LB设置一个内部IP,您可以通过这种方式到达吊舱吗?如果两者都失败,则运行状况检查可能是问题所在,因为NEG没有向其认为未就绪的组添加POD

现在,您还可以创建
后端配置
作为单独的Kubernetes声明。 我的例子是:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: cms-backend-config
  namespace: prod
spec:
  healthCheck:
    checkIntervalSec: 60
    port: 80
    type: HTTP #case-sensitive
    requestPath: /your-healthcheck-path
  connectionDraining:
    drainingTimeoutSec: 60 
我根本没有明确定义任何就绪性/活动性探测器,而且一切正常。我还注意到GKE和GCP的其他部分之间有时仍然存在小故障。我记得在使用不同的选项玩了很长一段时间后,我需要从头开始重新创建部署和入口。
我也这么做了,这可能是我开始在自动注册的NEG中看到端点的主要原因,向入口添加了一个默认后端,以避免在负载平衡器中注册单独的默认值:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: prod-ingress
  namespace: prod
  annotations:
    kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/ingress.global-static-ip-name: load-balancer-ip
    networking.gke.io/managed-certificates: my-certificate
spec:
  backend:
    serviceName: my-service
    servicePort: 80
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /
            backend:
              serviceName: my-service
              servicePort: 80
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: prod-ingress
  namespace: prod
  annotations:
    kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/ingress.global-static-ip-name: load-balancer-ip
    networking.gke.io/managed-certificates: my-certificate
spec:
  backend:
    serviceName: my-service
    servicePort: 80
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /
            backend:
              serviceName: my-service
              servicePort: 80