ipvsadm не показывает никаких записей в кластере kubeadm

Я установил kubeadm и создал службу и модуль:

packet@test:~$ kubectl get pod
NAME                                   READY     STATUS    RESTARTS   AGE
udp-server-deployment-6f87f5c9-466ft   1/1       Running   0          5m
udp-server-deployment-6f87f5c9-5j9rt   1/1       Running   0          5m
udp-server-deployment-6f87f5c9-g9wrr   1/1       Running   0          5m
udp-server-deployment-6f87f5c9-ntbkc   1/1       Running   0          5m
udp-server-deployment-6f87f5c9-xlbjq   1/1       Running   0          5m    

packet@test:~$ kubectl get service
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP           1h
udp-server-service   NodePort    10.102.67.0     <none>        10001:30001/UDP   6m

но все же я не могу получить доступ к udp-серверу:

packet@test:~$ curl http://192.168.43.161:30001
curl: (7) Failed to connect to 192.168.43.161 port 30001: Connection refused 

во время отладки я мог видеть, что kube-proxy работает, но в IPVS нет записи:

root@test:~# ps auxw | grep kube-proxy
root      4050  0.5  0.7  44340 29952 ?        Ssl  14:33   0:25 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf
root      6094  0.0  0.0  14224   968 pts/1    S+   15:48   0:00 grep --color=auto kube-proxy

root@test:~# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

Похоже, что в ipvsadm нет записи, вызывающей тайм-аут соединения.

С уважением, Ранджит


person Ranjith Koova    schedule 14.07.2018    source источник


Ответы (3)


Из этой проблемы (отложив часть балансировки нагрузки),

И externalIPs, и status.loadBalancer.ingress[].ip, кажется, игнорируются kube-proxy в режиме IPVS, поэтому внешний трафик полностью не маршрутизируется.

Напротив, kube-proxy в режиме iptables создает правила DNAT/SNAT для внешних IP-адресов и IP-адресов балансировщика нагрузки.

Поэтому проверьте, добавляете ли вы сетевой плагин (flannel, Calico, ...) улучшит ситуацию.

Или проверьте cloudnativelabs/kube-router, который также основан на ipvs.

Простая, но мощная альтернатива нескольким сетевым компонентам, используемым в типичных кластерах Kubernetes.
Все это из одного DaemonSet/Binary. Это не становится легче.

person VonC    schedule 14.07.2018
comment
я использую фланель - person Ranjith Koova; 14.07.2018
comment
Я, должно быть, пропустил это в вашем вопросе. Попробуйте cloudnativelabs/kube-router, чтобы увидеть, будет ли это работать лучше. - person VonC; 14.07.2018
comment
Я попробую с kube-router. Моя проблема очень проста. Она действительно странно не работает. - person Ranjith Koova; 14.07.2018

Поскольку curl использует соединение tcp, а 30001 — это порт udp, они не работают вместе, попробуйте инструмент проверки udp, например nmap.

person Kun Li    schedule 14.07.2018
comment
Я внес изменения, но все равно не помог. 0.1 ‹none› 443/TCP 6m packet@test:~$ curl 192.168.1.105:30001 curl: (7 ) Не удалось подключиться к порту 30001 192.168.1.105: нет маршрута к хосту - person Ranjith Koova; 14.07.2018

изначально я создал виртуальную машину (Linux VM), используя виртуальную коробку (работающую в окне), где я обнаружил этот тип проблемы.

Теперь я создал виртуальную машину (Linux VM) с помощью виртуального менеджера (работающего в Linux), в этой настройке нет проблем, и все работает нормально.

Было бы здорово, если бы кто-нибудь сказал, есть ли какие-либо ограничения для виртуальной коробки?

person Ranjith Koova    schedule 17.07.2018
comment
Может быть, какое-то сопоставление портов на уровне виртуальной машины? stackoverflow.com/a/33707882/6309 - person VonC; 17.07.2018