【问题标题】:Kubernetes Service not being assigned an (external) IP addressKubernetes 服务未分配(外部)IP 地址
【发布时间】:2018-08-11 20:01:56
【问题描述】:

对于与 SO 非常相似的问题,有各种答案都显示了我期望我的部署的样子,但我的没有。

  • 我在 Windows 上运行 Minikube 0.25 和 Kubernetes 1.9 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设置为

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

【问题讨论】:

  • 您在学习哪个教程?可以分享一下链接吗?
  • 您解决了这个问题吗?我也面临同样的问题。
  • 很遗憾没有。实际上,我只是转向其他事情并避免使用 k8s...

标签: kubernetes kubectl minikube


【解决方案1】:

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

【讨论】:

  • 是的,这就是它应该做的,但事实并非如此。在节点 IP 上的该端口上无法访问它。您可以在我上面发布的行中看到这一点...该服务也正确映射到适当的内部端口。
  • 您可以发布您的部署清单吗?大多数情况下,部署标签与服务选择器不匹配。我被这个咬过几次了。
  • 这不是问题 - 我可以进入仪表板并正确查看位于服务下方的 pod,这意味着标签已匹配。
  • @BaltazarChua 您的评论帮我节省了几个小时。你会认为 kubernetes 会为这种无模式的 yaml 文件提供错误/警告。
【解决方案2】:

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

kubectl port-forward service/service-name 9092

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

重要的是,它不是“生产”级解决方案。 非常适合作为临时黑客进入集群内部。

【讨论】:

    【解决方案3】:

    尝试使用 Kubernetes v1.9.2 在本地部署简单的 helloworld 映像时遇到同样的问题
    经过两周的尝试,似乎 Kubernetes 在端口 80 而不是 8080 内部暴露了所有 nginx web server 应用程序
    所以这应该工作kubectl expose deployment hello-service --type=NodePort --port=80

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2017-10-21
      相关资源
      最近更新 更多