k8s 中使用 ClusterIP + Ingress 從外部訪問(wèn)內(nèi)部 mysql
你在 minikube 環(huán)境中使用 ClusterIP 和 Ingress 配置 MySQL 集群。但是,你無(wú)法從外部訪問(wèn) MySQL,而 NodePort 卻可以工作。這是因?yàn)椋?/p>
使用 ClusterIP + Ingress
- ClusterIP 服務(wù)創(chuàng)建了一個(gè)內(nèi)部 IP,僅集群內(nèi)部的可訪問(wèn)。
- Ingress 充當(dāng)集群外部的入口,將外部流量路由到 ClusterIP 服務(wù)。
- 默認(rèn)情況下,Ingress 只能轉(zhuǎn)發(fā) http/https 流量。
因此,使用 ClusterIP + Ingress 從外部訪問(wèn) MySQL 需要額外配置,例如:
- 通過(guò) Service 資源中的 annotations 字段啟用 TCP 流量代理。
- 創(chuàng)建一個(gè)新的 Ingress,以及一個(gè)監(jiān)聽(tīng) TCP 端口的 IngressClass 和 Service。
使用 NodePort
- NodePort 服務(wù)將集群中的 3306 端口映射到宿主機(jī)上的 30001 端口。
- 這允許通過(guò) NodePort 訪問(wèn) MySQL,無(wú)需額外配置。
在你的特定情況下,你使用 NodePort 訪問(wèn)了 MySQL,因?yàn)槟阃ㄟ^(guò)宿主機(jī)的 IP 和端口直接訪問(wèn),而沒(méi)有使用 Ingress。
參考:
- [使用 Ingress 公開(kāi)服務(wù)](https://kubernetes.io/docs/ingress-nginx/ingress-exposing-tcp-udp-services/)
- [使用 NodePort 服務(wù)](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)