k8s 中使用 ClusterIP + Ingress 從外部訪問內部 mysql
你在 minikube 環境中使用 ClusterIP 和 Ingress 配置 MySQL 集群。但是,你無法從外部訪問 MySQL,而 NodePort 卻可以工作。這是因為:
使用 ClusterIP + Ingress
- ClusterIP 服務創建了一個內部 IP,僅集群內部的可訪問。
- Ingress 充當集群外部的入口,將外部流量路由到 ClusterIP 服務。
- 默認情況下,Ingress 只能轉發 http/https 流量。
因此,使用 ClusterIP + Ingress 從外部訪問 MySQL 需要額外配置,例如:
- 通過 Service 資源中的 annotations 字段啟用 TCP 流量代理。
- 創建一個新的 Ingress,以及一個監聽 TCP 端口的 IngressClass 和 Service。
使用 NodePort
- NodePort 服務將集群中的 3306 端口映射到宿主機上的 30001 端口。
- 這允許通過 NodePort 訪問 MySQL,無需額外配置。
在你的特定情況下,你使用 NodePort 訪問了 MySQL,因為你通過宿主機的 IP 和端口直接訪問,而沒有使用 Ingress。
參考:
- [使用 Ingress 公開服務](https://kubernetes.io/docs/ingress-nginx/ingress-exposing-tcp-udp-services/)
- [使用 NodePort 服務](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)