在 kubernetes.io 的交互式教程上,我们通过执行命令
现在使用
现在的教程建议使用
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --port 8080
创建了一种类型为 NodePort
的服务。但是我对结果感到困惑。
首先,教程中指出:
让我们运行 (...) 命令
kubectl get services
(...),我们可以看到该服务已获得 (...) 外部 IP(节点的 IP)。
但是这不准确,根据输出结果,并没有获得外部 IP:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORTS
kubernetes-bootcamp NodePort ... <none> 8080:31479
现在使用
kubectl describe service kubernetes-bootcamp
命令,可以得到以下信息:Type NodePort
IP ...
Port <unset> 8080/TCP
NodePort <unset> 31479/TCP
现在的教程建议使用
curl $(minikube ip):$NODE_PORT
,相当于curl <internal node IP>:<NodePort>
- 这样做是可以工作的,但仍然存在很多疑问:
- 根据
kubectl expose -h
的说明,--port
命令用于指定服务的端口,因此我期望--port
设置了暴露的<NodePort>
,但事实并非如此。为什么?应该怎么设置? - 容器应用程序可以通过
kubectl get nodes
得到,但它的<internal node IP>
在服务元数据中并没有显示出来。为什么? kubectl describe service
显示的IP
(等同于集群IP)和对应的端口(等同于通过--port
设置的端口),也可以路由到容器应用程序,因此curl <clusterIP>:8080
能够正常工作,并且满足通过--port
设置暴露端口的承诺。但这种方式却有些出乎意料:为什么一个NodePort
服务具有clusterIP
类型的接口?kubectl describe service
显示的Endpoints
有什么意义,既不是clusterIP
的终点,也不是NodePort
的终点?
NodePort
是用于测试" - 它不像是一个集群中节点之间的隧道,有许多可能的应用程序(单例数据节点,...)吗?您能否重新组织一下您的回复,以引用-回答的模式使其更易于阅读,这样我就可以接受它了? - B M