Kubernetes:使用TLS入口资源更新部署映像

我正在尝试更新我的部署的image 。 为此,我执行kubectl edit deployment web并更改spec.template.spec.containers.image属性:

 gcr.io/my-project-id-1234/app:v1 

至:

 gcr.io/my-project-id-1234/app:v2 

从日志中,我知道部署更新很好。 我遇到的问题是TLS入口; 这里是我的configuration:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tls-ingress spec: tls: - secretName: tls-secrets backend: serviceName: web servicePort: 80 

这里是更新之前kubectl describe ing web的结果:

 $ kubectl describe ing Name: tls-ingress Namespace: default Address: 105.78.154.212 Default backend: web:80 (10.0.2.3:8000) TLS: tls-secrets terminates Rules: Host Path Backends ---- ---- -------- Annotations: backends: {"k8s-be-32171":"HEALTHY"} forwarding-rule: k8s-fw-default-tls-ingress https-forwarding-rule: k8s-fws-default-tls-ingress https-target-proxy: k8s-tps-default-tls-ingress static-ip: k8s-fw-default-tls-ingress target-proxy: k8s-tp-default-tls-ingress url-map: k8s-um-default-tls-ingress 

更新之前,一切工作正常。 但不久之后,stream量停止成功路由到我的集群。 描述入口现在返回:

 Name: tls-ingress Namespace: default Address: 105.78.154.212 Default backend: web:80 (10.0.2.3:8000) TLS: tls-secrets terminates Rules: Host Path Backends ---- ---- -------- Annotations: static-ip: k8s-fw-default-tls-ingress target-proxy: k8s-tp-default-tls-ingress url-map: k8s-um-default-tls-ingress backends: {"k8s-be-32171":"UNHEALTHY"} forwarding-rule: k8s-fw-default-tls-ingress https-forwarding-rule: k8s-fws-default-tls-ingress https-target-proxy: k8s-tps-default-tls-ingress 

在更新我的部署时如何正确更新Ingress?

入口指向一个服务。 该服务指向一组具有一些标签的豆荚。 部署在Pod上定义这些标签。 以下是要排除故障的列表:

  1. 确认您的服务上的标签select符与您的部署正在创build的单元上的标签匹配。 否则,部署创build的Pod将不会被选中用于该服务,您的Ingress将不会指向任何内容。

  2. 确认服务作为NodePort 。 否则,来自Google的外部负载均衡器将无法在集群内部达到。

  3. 确认豆荚正在运行/健康。 部署可能会更新,但Pods不健康或CrashLoop。 应用程序使用GET / 200状态代码进行响应非常重要。

  4. 为健康检查创build一个防火墙规则:

     gcloud compute firewall-rules create allow-130-211-0-0-22 \ --source-ranges 130.211.0.0/22 \ --allow tcp:30000-32767 

入口报告{“k8s-be-32171”:“UNHEALTHY”},表示在后端服务上运行状况检查失败。

确保应用程序窗格已启动并运行,请检查

kubectl get pods <pod-name>

kubectl get deployment <deplyment-name>

如果应用程序窗口已准备就绪并正在运行,则入口应自动连接到新窗口,但取决于运行状况检查参数可能需要一段时间。