為什么使用 ClusterIP + Ingress 無法從外部訪問內部 MySQL,而使用 NodePort 卻可以?

為什么使用 ClusterIP + Ingress 無法從外部訪問內部 MySQL,而使用 NodePort 卻可以?

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)

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享