我知道 Ingress 需要处于健康状态的服务才能通过 HTTP(S) 提供其内容,为此我在工作负载部署上配置了 ReadinessProbe:
readinessProbe:
failureThreshold: 10
httpGet:
path: /api/healthz
port: 4400
scheme: HTTPS
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 20
本质上,我有一个在端口上处理 HTTPS 请求的 Web 服务器4400
,并且我配置了一个healthz
资源以返回 HTTP 200 响应。我的 Web 服务器正在监听端口上的传入连接:
- HTTP -> 4300
- HTTPS-> 4400
现在,为了访问这些端口,我有一个myService
针对 Web 服务器的 GKE 服务(),特别是:
ports:
- name: port-1
nodePort: 31277
port: 80
protocol: TCP
targetPort: 4300
- name: port-2
nodePort: 32167
port: 443
protocol: TCP
targetPort: 4400
myIngress
现在,如果我创建一个与 GCP 相关的新 Ingress 服务( ) myService
,则会返回以下 Kubernetes 配置:
spec:
backend:
serviceName: my-service
servicePort: port-2
rules:
- host: test-domain-name-here.net
http:
paths:
- backend:
serviceName: my-service
servicePort: port-2
tls:
- secretName: letsencrypt-custom-cert
正如您在此处看到的,它的目标是 servicePort port-2
:
GKE 为此入口配置创建了(自动)一个名为 的新后端服务k8s-be-32167--XXXX
,该服务的目标是port-2
32167
,最重要的是默认的 kubernetes L7 负载均衡健康检查应该监测健康状况——准备- 服务。
32167
问题是这个健康检查应该使用 HTTPS 而不是 HTTP 来测试端口,并且每当我尝试设置 HTTPS 的健康检查时,几分钟后 GCP 就会将一切重置为默认设置,这真是太烦人了!!!