核心内容摘要
舌尖上的幸福:豆花有瓜吃,天天免费吃,解锁你的甜蜜日常!
K8S 多副本环境下 Sentinel 通信解决方案当 Java 客户端应用部署在 K8S 集群中多副本而 Sentinel Dashboard 使用外部 Docker Compose 部署时需要解决以下几个关键通信问题
网络连通性分析
客户端 → Sentinel Dashboard 通信方向K8S 集群内的 Pod → 外部 Sentinel Dashboard端口Sentinel Dashboard 的 8858 端口Web 访问端口需求Pod 能够访问外部 Sentinel Dashboard 的网络地址
Sentinel Dashboard → 客户端通信方向外部 Sentinel Dashboard → K8S 集群内的 Pod端口每个 Pod 的 8719 端口Sentinel 通信端口需求外部 Sentinel Dashboard 能够访问每个 Pod 的 8719 端口
解决方案方案 1使用 NodePort 暴露 Pod 通信端口配置步骤创建 K8S ServiceNodePort 类型apiVersion:v1kind:Servicemetadata:name:sentinel-clientnamespace:your-namespacespec:type:NodePortselector:app:your-application# 匹配应用 Pod 的标签ports:-name:sentinel-commport:8719targetPort:8719nodePort:30719# 选择一个可用的 NodePort 范围端口配置应用 Pod 的 Sentinel 客户端env:-name:SENTINEL_DASHBOARD_ADDRvalue:外部SentinelDashboardIP:8858-name:SENTINEL_CLIENT_IPvalueFrom:fieldRef:fieldPath:status.hostIP# 使用 Node IP 作为客户端 IP修改 Sentinel 客户端配置在application.yml中添加spring.cloud.sentinel:transport:dashboard:${SENTINEL_DASHBOARD_ADDR}client-ip:${SENTINEL_CLIENT_IP}# 指定客户端 IP 为 Node IPport:30719方案 2使用 LoadBalancer 或 ingress 暴露服务云环境如果部署在云环境中可以使用 LoadBalancer 类型的 Service 或 Ingress 来暴露 Sentinel 通信端口具体配置根据云服务商提供的能力调整。
方案 3网络打通方案适用于私有云或本地环境确保 K8S 集群网络与外部网络互通配置 K8S 网络插件如 Calico、Flannel允许外部流量访问 Pod 网络调整防火墙规则允许 8719 端口的入站流量配置 Pod 使用固定的主机网络对于需要直接暴露端口的场景可以考虑使用hostNetwork: true但这会失去 Pod 网络隔离的优势且可能导致端口冲突仅建议在特定场景下使用。
三、
关键技术点
客户端 IP 注册Sentinel 客户端在启动时会向 Dashboard 注册自身的 IP 地址Dashboard 后续通过该 IP 访问客户端的 8719 端口。
在 K8S 环境中默认情况下客户端会注册 Pod 的集群内部 IP这对外部 Dashboard 不可见因此需要显式指定客户端 IP通过spring.cloud.sentinel.transport.client-ip配置为 Node IP 或可从外部访问的 IP确保注册的 IP 对外部可见确保该 IP 地址能够被外部 Sentinel Dashboard 访问