我在GCP上设置了一个负载均衡器,它使用Kubernetes引擎中的一个侵入器。
默认情况下,后端服务将所有实例注册为不健康的。我将健康检查更新为HTTPS协议和/healthz url,因为这是我的健康检查的url。
我把它放在一旁几分钟,后端服务状态--现在所有的实例都是健康的--然后我在日志中看到我的pod在/healthz上为200个响应服务。
我导航到页面,它开始显示502错误。我回到控制台中的健康检查页面,健康检查返回到HTTP /。
是什么原因导致健康检查恢复到HTTP?下面的日志显示,在10分钟内,健康检查继续请求https i设置,然后请求更改为http。
...
[W 180621 20:02:35 iostream:1451] SSL Error on 9 ('10.128.0.14', 48346): [SSL: HTTP_REQUEST] http request (_ssl.c:833)
[W 180621 20:02:35 iostream:1451] SSL Error on 9 ('10.128.0.13', 63030): [SSL: HTTP_REQUEST] http request (_ssl.c:833)
[I 180621 20:02:43 web:2106] 200 GET /healthz (10.128.0.14) 0.75ms
[I 180621 20:02:43 web:2106] 200 GET /healthz (10.128.0.13) 0.80ms
[I 180621 20:02:43 web:2106] 200 GET /healthz (10.128.0.14) 0.74ms
...
[I 180621 20:05:46 web:2106] 200 GET /healthz (10.128.0.13) 1.26ms
[I 180621 20:05:46 web:2106] 200 GET /healthz (10.128.0.14) 0.63ms
[I 180621 20:05:46 web:2106] 200 GET /healthz (10.128.0.15) 0.64ms
[W 180621 20:05:46 iostream:1451] SSL Error on 9 ('10.128.0.14', 49971): [SSL: HTTP_REQUEST] http request (_ssl.c:833)
[W 180621 20:05:46 iostream:1451] SSL Error on 9 ('10.128.0.15', 62893): [SSL: HTTP_REQUEST] http request (_ssl.c:833)
[W 180621 20:05:48 iostream:1451] SSL Error on 9 ('10.128.0.13', 52191): [SSL: HTTP_REQUEST] http request (_ssl.c:833)
[W 180621 20:05:48 iostream:1451] SSL Error on 9 ('10.128.0.13', 60549): [SSL: HTTP_REQUEST] http request (_ssl.c:833)编辑:我添加了准备好的探测器,在这个吊舱上,入口是连接的。
readinessProbe:
httpGet:
port: 8902
scheme: HTTPS
path: /healthz
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1发布于 2018-06-27 08:28:32
我查过了,这应该是故意的行为。
Kubernetes控制健康检查,并从kubernetes集群中的数据配置它。Kubernetes没有看到通过gcloud对健康检查所做的任何改变。
因此,我想它检查它和任何修改被恢复是正常的。
使用readinessProbe的解决方案。
也请看一下这:
当前,所有服务后端必须满足以下任一项要求,才能通过从GCE负载均衡器发送给它的HTTP(S)健康检查:
侵入控制器首先寻找一个兼容的准备状态探针,如果它找到了一个,它采用它作为GCE负载平衡器的HTTP(S)健康检查。如果没有就绪探测,或者准备状态探测需要特殊的HTTP报头,则宏控制器将GCE负载平衡器的HTTP健康检查指向'/‘。
发布于 2019-01-31 20:56:22
我也有过同样的问题。
问题是我的readinessProbe只被设置为HTTPS。
readinessProbe:
httpGet:
path: "/health?ready=1"
port: 8080
scheme: HTTPS但是,GCE后端自动假定您的服务响应HTTP,默认情况下将扫描那里的健康检查。
您可以了解更多关于GKE Ingresses和Heath检查如何响应这里的信息。
要解决这个问题,我需要更新我的服务,以便只使用HTTPS进行响应。
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/app-protocols: '{"my-port-name":"HTTPS"}'
spec:
ports:
- port: 8080
targetPort: 8080
name: my-port-name这将导致入口创建用于通过HTTPS扫描readinessProbes的后端服务。
注意:在完成此操作之前,一定要先删除您的LoadBalancer和HealthCheck,然后重新创建它,因为它不会响应应用于您的服务的更新。
发布于 2018-06-24 02:58:35
看起来您的后端只在HTTPS协议上服务,但是您已经为HTTPS协议部署了一个Ingress资源。部署后手动更改配置不是解决方案,因为主服务器将还原更改以符合清单。根据本文件您可以通过指定包含TLS私钥和证书的秘密来保护入侵域。目前,Ingress只支持一个TLS端口443,并假定TLS终止。
https://serverfault.com/questions/916748
复制相似问题