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

时间:2018-03-03 20:26:41

标签: kubernetes kubectl minikube

围绕SO的非常相似的问题有各种各样的答案,这些问题都显示了我期望我的部署的样子,但是我的部署没有。

  • 我在Windows上使用Kubernetes 1.9运行Minikube 0.25 10。
  • 我已经成功创建了一个节点,一个复制控制器和一个 单个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设置为&lt; nodes&gt;

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

kubectl port-forward service/service-name 9092

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

重要的一点是,它不是“生产”级解决方案。 作为进入集群内部的临时手段,效果很好。