未为 Kubernetes 服务分配(外部)IP 地址

Jon*_*art 5 kubernetes kubectl minikube

对于围绕 SO 的非常相似的问题,有各种答案,它们都显示了我希望我的部署看起来像什么,但我的却没有。

  • 我在 Windows 10 上运行 Minikube 0.25,Kubernetes 1.9。
  • 我已经成功创建了一个节点,一个复制控制器,单个 pod 模板已经复制了 10 次。
  • 该节点是 Minikube,并分配了 IP 地址 10.49.106.251
  • 仪表板在 10.49.106.251:30000 可用

我正在使用 YAML 文件部署服务,但从未为该服务分配外部 IP - 如果我碰巧使用kubectl expose.

我正在使用的 YAML 文件:

kind: Service
apiVersion: v1
metadata:
  name: hello-service
spec:
  type: NodePort
  selector:
    app: hello-world
  ports:
  - protocol: TCP
    port: 8080
Run Code Online (Sandbox Code Playgroud)

我还可以使用 YAML 文件来分配外部 IP - 我为其分配与节点 IP 地址相同的值。无论哪种方式,都无法连接到服务。我还应该指出,10 个复制的 pod 都与选择器匹配。

kubectl get svc默认运行,更新外部IP后的结果如下:

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
hello-service   NodePort    10.108.61.233   <none>          8080:32406/TCP   1m
hello-service   NodePort    10.108.61.233   10.49.106.251   8080:32406/TCP   1m
Run Code Online (Sandbox Code Playgroud)

我一直在关注的教程,以及关于 SO 的其他答案显示的结果类似于:

hello-service   NodePort    10.108.61.233   <nodes>   8080:32406/TCP   1m
Run Code Online (Sandbox Code Playgroud)

不同之处在于外部IP设置为<nodes>

我在本地运行时遇到了许多问题 - 这只是另一种情况,还是其他人找到了解决外部 IP 分配问题的方法?

Bal*_*hua 2

使用 NodePort 意味着它将在集群的所有节点上打开一个端口。在上面的示例中,暴露给外界的端口是32406。为了访问hello-service(如果是http),它将是http://[节点ip]:32406/。这将击中您的 minikube,并且请求将以循环方式路由到您的 pod。

  • 您可以发布您的部署清单吗?大多数情况下,部署标签与服务选择器不匹配。我被这个咬过好几次了。 (2认同)