Kube群集通信

时间:2016-12-29 17:15:48

标签: kubernetes

我正在使用虚拟盒vm在我的笔记本电脑中设置示例Kubernetes群集。 使用法兰绒作为覆盖网络。我已经成功创建了一个主节点和一个节点。当我在节点中启动pod以部署mongodb容器时,将使用端点成功部署pod和容器。服务也成功创建

在主人

[osboxes@kubemaster pods]$ kubectl get pods -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP            NODE
busybox   1/1       Running   0          3m        172.17.60.3   192.168.6.103
mongodb   1/1       Running   0          21m       172.17.60.2   192.168.6.103
[osboxes@kubemaster pods]$ kubectl get services -o wide
NAME           CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE           SELECTOR
kubernetes     10.254.0.1       <none>        443/TCP     17d       <none>
mongoservice   10.254.244.175   <none>        27017/TCP   47m       name=mongodb


[osboxes@kubemaster pods]$ kubectl describe svc mongoservice 
Name:           mongoservice
Namespace:      default
Labels:         name=mongoservice
Selector:       name=mongodb
Type:           ClusterIP
IP:         10.254.244.175
Port:           <unset> 27017/TCP
Endpoints:      172.17.60.2:27017
Session Affinity:   None

在具有docker ps

的节点上
8707a465771b        busybox                                                      "sh"                  9 minutes ago Up 9minutes                            k8s_busybox.53e510d6_busybox_default_c4892314-cde3-11e6-8a53-08002700df07_492b1a89
bea9de4e05cf        registry.access.redhat.com/rhel7/pod-infrastructure:latest   "/pod"                   9 minutes ago       Up 9 minutes                            k8s_POD.ae8ee9ac_busybox_default_c4892314-cde3-11e6-8a53-08002700df07_2bffae46
eaff8dc1a360        mongo                                                        "/entrypoint.sh mongo"   28 minutes ago      Up 28 minutes                           k8s_mongodb.d1eca71a_mongodb_default_240cd411-cde1-11e6-8a53-08002700df07_ef5a8bbe
6a90b06cd434        registry.access.redhat.com/rhel7/pod-infrastructure:latest   "/pod"                   28 minutes ago      Up 28 minutes                           k8s_POD.7ce0ec0_mongodb_default_240cd411-cde1-11e6-8a53-08002700df07_11074b20

我可以连接到mongodb服务的唯一方法是在显示&#34的节点上运行http://172.17.60.2:27017/;看起来您正试图通过本机驱动程序端口上的HTTP访问MongoDB。 #34;

问题是我无法从主服务器或任何其他节点访问mongodb端点至少与上面的相同网址。我有另一个java webapp容器将作为另一个节点中的pod运行而我需要让它互动,但这是下一步。我计划使用env变量进行interpod通信,并且还看到环境变量是在节点中的容器上正确创建的。

我浏览了这个http://kubernetes.io/docs/user-guide/debugging-services/并按照流程进行操作,但无法完成任何步骤。

[osboxes@kubemaster pods]$ sudo kubectl run -i --tty busybox --image=busybox --generator="run-pod/v1"
Waiting for pod default/busybox to be running, status is Pending, pod ready: false
Waiting for pod default/busybox to be running, status is Pending, pod ready: false
If you don't see a command prompt, try pressing enter.
Error attaching, falling back to logs: dial tcp 192.168.6.103:10250: getsockopt: connection refused
Error from server: Get https://192.168.6.103:10250/containerLogs/default/busybox/busybox: dial tcp 192.168.6.103:10250: getsockopt: connection refused


[osboxes@kubemaster pods]$ curl 172.17.60.2:27017
curl: (7) Failed connect to 172.17.60.2:27017; No route to host
[osboxes@kubemaster pods]$ curl 10.254.244.175:27017
curl: (7) Failed connect to 10.254.244.175:27017; Connection timed out

[osboxes@kubemaster pods]$ kubectl exec -ti mongodb -c k8s_mongodb.d1eca71a_mongodb_default_240cd411-cde1-11e6-8a53-08002700df07_ef5a8bbe sh
Error from server: container k8s_mongodb.d1eca71a_mongodb_default_240cd411-cde1-11e6-8a53-08002700df07_ef5a8bbe is not valid for pod mongodb
[osboxes@kubemaster pods]$ kubectl exec -ti mongodb -c k8s_POD.7ce0ec0_mongodb_default_240cd411-cde1-11e6-8a53-08002700df07_11074b20 sh
Error from server: container k8s_POD.7ce0ec0_mongodb_default_240cd411-cde1-11e6-8a53-08002700df07_11074b20 is not valid for pod mongodb
[osboxes@kubemaster pods]$ kubectl exec -ti mongodb  sh
Error from server: dial tcp 192.168.6.103:10250: getsockopt: connection refused

我怀疑存在一些潜在的网络问题,尽管创建了pod和服务,但我不是网络人员,因此无法弄清楚究竟是什么问题。请帮助。

2 个答案:

答案 0 :(得分:1)

TL; DR:您无法从主服务器连接到服务,您必须创建NodePort服务,然后使用NodePort给定的服务连接。

查看服务说明:

[osboxes@kubemaster pods]$ kubectl describe svc mongoservice 
Name:           mongoservice
Namespace:      default
Labels:         name=mongoservice
Selector:       name=mongodb
Type:           ClusterIP
IP:         10.254.244.175
Port:           <unset> 27017/TCP
Endpoints:      172.17.60.2:27017
Session Affinity:   None

服务端点是:Endpoints: 172.17.60.2:27017,正如您所看到的,这是一个法兰绒IP:运行Mongo的容器的IP。此IP是覆盖网络的一部分。它无法从虚拟网络(法兰绒网络)外部访问。

这就是你这样做的原因:

 [osboxes@kubemaster pods]$ curl 172.17.60.2:27017

你得到这个错误,这是对的:

 curl: (7) Failed connect to 172.17.60.2:27017; No route to host

因为您正尝试从主节点访问容器IP。

您有2个选项,您可以将mongoservice公开为NodePort服务(将容器端口绑定到节点端口,使用-p 8000:8080时在docker中的方式,或者跳转到集群内并尝试从pod中连接到服务(这是你尝试过的和失败的)。

将服务公开为nodeport(当您不在云中运行时相当于LoadBalancer)

kubectl expose service mongoservice --port=27017 --type=NodePort

如果mongoservice已经存在,您可能必须删除它。现在检查服务:

Name:           mongo-4025718836
Namespace:      default
Labels:         pod-template-hash=4025718836
            run=mongo
Selector:       pod-template-hash=4025718836,run=mongo
Type:           NodePort
IP:         10.0.0.11
Port:           <unset> 27017/TCP
NodePort:       <unset> 32076/TCP
Endpoints:      172.17.0.9:27017
Session Affinity:   None

请注意,现在您拥有相同的端点(Pod Ip,mongo端口:172.17.0.9:27017),但NodePort有一个值,即NODE中暴露mongodb的端口。)

curl NODE:32076
It looks like you are trying to access MongoDB over HTTP on the native driver port.

答案 1 :(得分:0)

发现了这个问题。这是因为在/ etc / kubernetes / kubelet中

kubelet地址以某种方式为127.0.0.1,将其更改为0.0.0.0工作正常。

#KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_ADDRESS="--address=0.0.0.0"

sudo kubectl logs mongodb

所以上面的命令现在可以在master中正常工作。

但是这个命令仍然只适用于运行mongodb的节点

curl 10.254.39.156:27017
It looks like you are trying to access MongoDB over HTTP on the native driver port.

我无法从kube主控或其他节点访问此内容。所以仍然需要弄明白。那里的任何人都可以提供一些调试技巧,会很棒。

更新

kube master上的路由表

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.6.1     0.0.0.0         UG    100    0        0 enp0s3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.6.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

节点1

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.6.1     0.0.0.0         UG    100    0        0 enp0s3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 flannel0
172.17.100.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0
192.168.6.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

节点2

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.6.1     0.0.0.0         UG    100    0        0 enp0s3
0.0.0.0         10.0.3.2        0.0.0.0         UG    101    0        0 enp0s8
10.0.3.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s8
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 flannel0
172.17.95.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
192.168.6.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3