如何通过 ClusterIP 访问 Kubernetes 服务
How can I access the Kubernetes service through ClusterIP
我正在尝试使用三个虚拟机创建 Kubernetes 集群(Master – 10.x.x.4,Node1 – 10.x.x.150,Node2 – 10.x.x.160)。
按照 link:http://kubernetes.io/v1.0/examples/guestbook/,我能够成功创建留言簿应用程序。我只对 frontend-service.yaml: 进行了一项更改,以使用 NodePort。我可以使用节点 IP 和端口号(10.x.x.150:30724 或 10.x.x.160:30724)访问前端服务。所以一切都按预期工作,但我无法使用 ClusterIP 地址访问前端服务(在我的例子中 10.x.x.79)。
我对NodePort的理解是服务可以通过集群IP访问,也可以在集群的每个节点上的一个端口上访问。如何通过 ClusterIP 访问该服务,这样我就不必访问每个节点?我在这里遗漏了什么吗?
服务和 pod 详细信息
$sudo kubectl 描述服务前端
Name: frontend
Namespace: default
Labels: name=frontend
Selector: name=frontend
Type: NodePort
IP: 10.x.x.79
Port: <unnamed> 80/TCP
NodePort: <unnamed> 30724/TCP
Endpoints: 172.x.x.13:80,172.x.x.14:80,172.x.x.11:80
Session Affinity: None
No events.
$sudo kubectl describe pod frontend-2b5us
Name: frontend-2b5us
Namespace: default
Image(s): gcr.io/google_samples/gb-frontend:v3
Node: 10.x.x.150/10.x.x.150
Labels: name=frontend
Status: Running
Reason:
Message:
IP: 172.x.x.11
Replication Controllers: frontend (3/3 replicas created)
Containers:
php-redis:
Image: gcr.io/google_samples/gb-frontend:v3
State: Running
Started: Fri, 30 Oct 2015 04:00:40 -0500
Ready: True
Restart Count: 0
我尝试搜索,但没有找到适合我的确切问题的任何解决方案,但我确实找到了与 GCE 类似的问题。
您尝试从哪里访问 clusterIP? clusterIP(默认情况下)仅在集群内工作。是虚拟IP,没有路由。
您没有ClusterIP 服务。你有一个 NodePort 服务。要访问它,您可以连接到集群中任何节点上的 NodePort,正如您已经发现的那样。你在这里得到 load-balancing。即使您连接到集群节点,您获得的 pod 也不一定 运行 在该特定节点上。
阅读 https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types 文档中的相关部分,了解其他服务类型。您可能不希望在 GCP 上使用 NodePort。
谈论 ClusterIP。要出于调试目的访问 ClusterIP 服务,您可以 运行 kubectl port-forward
。您实际上不会访问该服务,但会直接连接到 pods.
之一
例如
kubectl port-forward frontend-2b5us 80 8080
现在连接到 localhost:8080
更复杂的命令,在给定命名空间 -n weave
和选择器的情况下自行发现端口。摘自 https://www.weave.works/docs/scope/latest/installing/
kubectl port-forward -n weave \
"$(kubectl get -n weave pod \
--selector=weave-scope-component=app \
-o jsonpath='{.items..metadata.name}')" \
4040
我正在尝试使用三个虚拟机创建 Kubernetes 集群(Master – 10.x.x.4,Node1 – 10.x.x.150,Node2 – 10.x.x.160)。
按照 link:http://kubernetes.io/v1.0/examples/guestbook/,我能够成功创建留言簿应用程序。我只对 frontend-service.yaml: 进行了一项更改,以使用 NodePort。我可以使用节点 IP 和端口号(10.x.x.150:30724 或 10.x.x.160:30724)访问前端服务。所以一切都按预期工作,但我无法使用 ClusterIP 地址访问前端服务(在我的例子中 10.x.x.79)。
我对NodePort的理解是服务可以通过集群IP访问,也可以在集群的每个节点上的一个端口上访问。如何通过 ClusterIP 访问该服务,这样我就不必访问每个节点?我在这里遗漏了什么吗?
服务和 pod 详细信息
$sudo kubectl 描述服务前端
Name: frontend
Namespace: default
Labels: name=frontend
Selector: name=frontend
Type: NodePort
IP: 10.x.x.79
Port: <unnamed> 80/TCP
NodePort: <unnamed> 30724/TCP
Endpoints: 172.x.x.13:80,172.x.x.14:80,172.x.x.11:80
Session Affinity: None
No events.
$sudo kubectl describe pod frontend-2b5us
Name: frontend-2b5us
Namespace: default
Image(s): gcr.io/google_samples/gb-frontend:v3
Node: 10.x.x.150/10.x.x.150
Labels: name=frontend
Status: Running
Reason:
Message:
IP: 172.x.x.11
Replication Controllers: frontend (3/3 replicas created)
Containers:
php-redis:
Image: gcr.io/google_samples/gb-frontend:v3
State: Running
Started: Fri, 30 Oct 2015 04:00:40 -0500
Ready: True
Restart Count: 0
我尝试搜索,但没有找到适合我的确切问题的任何解决方案,但我确实找到了与 GCE 类似的问题。
您尝试从哪里访问 clusterIP? clusterIP(默认情况下)仅在集群内工作。是虚拟IP,没有路由。
您没有ClusterIP 服务。你有一个 NodePort 服务。要访问它,您可以连接到集群中任何节点上的 NodePort,正如您已经发现的那样。你在这里得到 load-balancing。即使您连接到集群节点,您获得的 pod 也不一定 运行 在该特定节点上。
阅读 https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types 文档中的相关部分,了解其他服务类型。您可能不希望在 GCP 上使用 NodePort。
谈论 ClusterIP。要出于调试目的访问 ClusterIP 服务,您可以 运行 kubectl port-forward
。您实际上不会访问该服务,但会直接连接到 pods.
例如
kubectl port-forward frontend-2b5us 80 8080
现在连接到 localhost:8080
更复杂的命令,在给定命名空间 -n weave
和选择器的情况下自行发现端口。摘自 https://www.weave.works/docs/scope/latest/installing/
kubectl port-forward -n weave \
"$(kubectl get -n weave pod \
--selector=weave-scope-component=app \
-o jsonpath='{.items..metadata.name}')" \
4040