kubernetes-guide/tencent/troubleshooting/public-service-or-ingress-c...

32 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 排查公网服务不通
## 问题描述
部署在 TKE 集群内的服务使用公网对外暴露 (LoadBalancer 类型 Service 或 Ingress),但访问不通。
## 常见原因
### 节点安全组没放通 NodePort
如果服务使用 TKE 默认的公网 Service 或 Ingress 暴露CLB 会转发流量到 NodePort流量转发链路是: client > CLB > NodePort > ...
CLB 转发的数据包不会做 SNAT所以报文到达节点时源 IP 就是 client 的公网 IP如果节点安全组入站规则没有放通 client > NodePort 链路的话,是访问不通的。
**解决方案1:** 节点安全组入站规则对公网访问 NodePort 区间端口(30000-32768):
![](https://image-host-1251893006.cos.ap-chengdu.myqcloud.com/2023%2F09%2F25%2F20230925162137.png)
**解决方案2:** 若担心直接放开整个 NodePort 区间所有端口有安全风险,可以只暴露 service 所用到的 NodePort (比较麻烦)。
**解决方案3:** 若只允许固定 IP 段的 client 访问 ingressgateway可以只对这个 IP 段放开整个 NodePort 区间所有端口。
**解决方案4:** 启用 CLB 直通 Pod这样流量就不经过 NodePort所以就没有此安全组问题。启用 CLB 直通 Pod 需要集群网络支持 VPC-CNI详细请参考 [如何启用 CLB 直通 Pod](https://imroc.cc/k8s/tke/faq/loadblancer-to-pod-directly/) 。
### 使用了 ClusterIP 类型 Service
如果使用 TKE 默认的 CLB Ingress 暴露服务,依赖后端 Service 要有 NodePort如果 Service 是 ClusterIP 类型,将无法转发,也就不通。
**解决方案1**: Ingress 涉及的后端 Service 改为 NodePort 类型。
**解决方案2:** 不使用 TKE 默认的 CLB Ingress其它类型 Ingress比如 [Nginx Ingress](https://cloud.tencent.com/document/product/457/50502) 。