1

我一直在努力,但我没有取得任何进展。

问题是,当我从部署中创建服务时,为该服务创建的 ClusterIp 无法在 MiniKube 中访问,正如我所期望的那样。

我可以通过 ssh 到与我公开的不同的 pod 并 ping 服务的 IP 来验证它是否不可访问。

kubectl expose deployment/foo --target-port=2500

这将在 10.0.0.5 创建服务,该服务路由到 ${foo's IP}:2500

kubectl exec -it bar-5435435-sadasf -- bash root@bar-5435435-sadasf:/# ping 10.0.0.5

PING 10.0.0.5 (10.0.0.5): 56 data bytes ^C--- 10.0.0.5 ping statistics --- 8 packets transmitted, 0 packets received, 100% packet loss

ping pod IP($foo 的 IP)没有问题,但这不是我想要做的。

我已经阅读了足够多的内容,知道这个问题很可能与Minikubeproxy.go中的等价物有关。kube-proxy

https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies https://github.com/kubernetes/minikube/blob/master/pkg/localkube/proxy。去

我已经检查了 Minikube 日志并 grep 了任何包含“代理”的内容,似乎这可能指向问题,但我不知道如何解决它。

我最新的代理日志:

Sep 06 18:13:06 minikube localkube[3373]: Starting proxy... Sep 06 18:13:06 minikube localkube[3373]: Waiting for proxy to be healthy... Sep 06 18:13:07 minikube localkube[3373]: proxy is ready! Sep 06 18:46:47 minikube localkube[3373]: E0906 18:46:47.742324 3373 proxy.go:207] Error proxying data from backend to client: write tcp 192.168.99.101:8443->192.168.99.1:58760: write: broken pipe Sep 06 19:11:41 minikube localkube[3373]: E0906 19:11:41.077014 3373 proxy.go:193] Error proxying data from client to backend: write tcp 127.0.0.1:44180->127.0.1.1:10250: write: broken pipe Sep 06 19:11:41 minikube localkube[3373]: E0906 19:11:41.077220 3373 proxy.go:207] Error proxying data from backend to client: write tcp 192.168.99.101:8443->192.168.99.1:45586: write: broken pipe Sep 06 19:22:07 minikube localkube[3373]: E0906 19:22:07.214287 3373 proxy.go:207] Error proxying data from backend to client: write tcp 192.168.99.101:8443->192.168.99.1:51558: write: broken pipe Sep 06 19:22:07 minikube localkube[3373]: E0906 19:22:07.214459 3373 proxy.go:193] Error proxying data from client to backend: write tcp 127.0.0.1:45184->127.0.1.1:10250: write: broken pipe

有谁知道问题是什么以及如何解决?

4

1 回答 1

1

服务使用 ClusterIP 获取其虚拟 IP 地址。该 IP 地址用于与服务通信,并且只能在集群内访问。

确保您不仅通过其 IP 连接到服务,而且还使用该服务公开的端口。

在你的情况下:

$ kubectl expose deployment/foo --port=3030 --target-port=2500

$ kubectl get svc 
NAME  CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
foo   10.0.0.73    <nodes>       3030/TCP        1m

现在可以从集群内访问该服务:

$ minikube ssh
$ curl 10.0.0.73:3030
Hello World!
$ exit

$ kubectl exec -i -t bar-j26rd /bin/sh
$ curl 10.0.0.73:3030
Hello World!
$ exit
于 2017-09-14T08:31:40.300 回答