围绕SO的非常相似的问题有各种各样的答案,这些问题都显示了我期望我的部署的样子,但是我的部署没有。
我正在使用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分配问题的方法?
答案 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是要公开的容器端口,以便我可以在本地开发环境上访问群集内的应用程序。
重要的一点是,它不是“生产”级解决方案。 作为进入集群内部的临时手段,效果很好。