繁体   English   中英

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

[英]Kubernetes Service not being assigned an (external) IP address

对于围绕 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

我还可以使用 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

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

hello-service   NodePort    10.108.61.233   <nodes>   8080:32406/TCP   1m

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

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

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

尝试使用Kubernetes v1.9.2在本地部署一个简单的 helloworld 镜像时出现同样的问题
经过两周的尝试,似乎 Kubernetes 在内部公开了所有nginx web 服务器应用程序在端口80而不是8080
所以这应该工作kubectl expose deployment hello-service --type=NodePort --port=80

出于本地开发目的,我还遇到了为本地开发集群公开“公共 IP”的问题。 幸运的是,我找到了 kubectl 命令之一,它可以提供帮助:

kubectl port-forward service/service-name 9092

其中 9092 是要公开的容器端口,以便我可以在本地开发环境中访问集群内的应用程序。

重要的一点是,它不是“生产”级解决方案。 可以很好地作为临时黑客进入集群内部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM