我已经看过这个问题了;AFAIK 我正在那里的答案中做所有事情。
使用 GKE,我为 kubernetes 集群部署了一个基于 GCP HTTP(S) 负载均衡器的入口,其中包含两个几乎相同的部署:同一应用程序的生产和开发实例。
我在每个 pod 模板上设置了一个专用端口,用于负载均衡器的健康检查,这样它们就不会受到来自主 HTTP 端口上根路径的重定向的影响。但是,运行状况检查始终失败。
从这些 文档中,我向我的部署添加了一个readinessProbe参数,负载均衡器似乎完全忽略了它。
我已经使用以下(在单独的终端中)验证了:p-ready(9292;专用运行状况检查端口)上的服务器运行正常:
➜ kubectl port-forward deployment/d-an-server p-ready
➜ curl http://localhost:9292/ -D -
HTTP/1.1 200 OK
content-length: 0
date: Wed, 26 Feb 2020 01:21:55 GMT
我错过了什么?
关于以下配置的几点说明:
- 下面的
${...}变量由构建脚本填充,作为部署的一部分。 - 第二个服务 (
s-an-server-dev) 几乎与第一个服务(具有自己的部署)完全相同,只是-dev名称和标签上有后缀。
部署
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
name: "d-an-server"
namespace: "default"
labels:
app: "a-an-server"
spec:
replicas: 1
selector:
matchLabels:
app: "a-an-server"
template:
metadata:
labels:
app: "a-an-server"
spec:
containers:
- name: "c-an-server-app"
image: "gcr.io/${PROJECT_ID}/an-server-app:${SHORT_SHA}"
ports:
- name: "p-http"
containerPort: 8080
- name: "p-ready"
containerPort: 9292
readinessProbe:
httpGet:
path: "/"
port: "p-ready"
initialDelaySeconds: 30
服务
apiVersion: "v1"
kind: "Service"
metadata:
name: "s-an-server"
namespace: "default"
spec:
ports:
- port: 8080
targetPort: "p-http"
protocol: "TCP"
name: "sp-http"
selector:
app: "a-an-server"
type: "NodePort"
入口
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: "primary-ingress"
annotations:
kubernetes.io/ingress.global-static-ip-name: "primary-static-ipv4"
networking.gke.io/managed-certificates: "appname-production-cert,appname-development-cert"
spec:
rules:
- host: "appname.example.com"
http:
paths:
- backend:
serviceName: "s-an-server"
servicePort: "sp-http"
- host: "dev.appname.example.com"
http:
paths:
- backend:
serviceName: "s-an-server-dev"
servicePort: "sp-http-dev"