google-cloud-platform - GKE SSL 代理 NEG 运行状况检查不适用于基于 TCP 的服务
问题描述
我有一个StatefulSet的ejabberd3
副本。我使用以下声明将它们暴露给 GCP NEG:
apiVersion: v1
kind: Service
metadata:
name: ejabberd
annotations:
cloud.google.com/neg: '{"exposed_ports": {"5222":{"name": "ejabberd-xmpp-production-neg"}, "5443":{"name": "ejabberd-http-production-neg"}}}'
spec:
type: ClusterIP
clusterIP: None
selector:
app: ejabberd
ports:
- protocol: TCP
name: xmpp
port: 5222
targetPort: 5222
- protocol: TCP
name: http
port: 5443
targetPort: 5443
运行状况检查是端口 5443 上的 HTTP 端点,它在 path 处返回 HTTP 200 (OK) 状态代码/
。
问题是,当我创建SSL 代理时,健康检查总是失败,但是当我 ssh 进入 Pod 并执行时,$ curl localhost:5443/
我得到了成功响应。TCP 健康检查也不起作用。
解决方案
该问题是由云负载均衡器无法访问端口引起的。我通过创建允许负载均衡器访问指定端口的防火墙规则来修复它。
这是通过运行以下命令实现的:
gcloud compute firewall-rules create fw-allow-health-check-and-proxy \
--network=NETWORK_NAME \
--action=allow \
--direction=ingress \
--target-tags=GKE_NODE_NETWORK_TAGS \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--rules=tcp:5443,tcp:5222
可以在此处找到更多信息将外部 HTTP(S) 负载平衡器附加到独立 NEG
推荐阅读
- python - 如何在 re.sub 中正确使用变量名
- sql - MySQL 可以执行 SQL Server 为什么不能执行?
- javascript - 如何将 React.js 渲染为 HTML 以进行投资组合
- c++ - 第一次我的断言失败时出现错误消息
- python - 如何将文档导入python?
- reactjs - 我正在使用 Apollo 客户端,并且在变异数据时出现未处理的拒绝错误
- c# - NavMeshAgent 在到达目的地 Unity3D 之前停止
- c++ - OpenCL 简单矩阵乘法未返回正确结果
- c++ - 谷歌测试包括 gtest/gtest.h
- c# - 将数据表转换为 JSON,然后将其发布到 Jquery 方法