Calico: модули Kubernetes не могут пинговать друг друга, используя IP-адрес кластера

Я установил kubernetes с помощью kubeadm v1.14.0 и добавил два рабочих узла с помощью команды join. конфигурация kubeadm

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.14.0
controlPlaneEndpoint: "172.22.203.12:6443"
networking:
provider.
    podSubnet: "111.111.0.0/16"

список узлов

NAME    STATUS   ROLES    AGE   VERSION
linan   Ready    <none>   13h   v1.14.0
node2   Ready    <none>   13h   v1.14.0
yiwu    Ready    master   13h   v1.14.0

Я проверил, что все стручки загружаются

kubectl get pods -n kube-system

NAME                            READY   STATUS    RESTARTS   AGE
calico-node-h49t9               2/2     Running   1          13h
calico-node-mplwx               2/2     Running   0          13h
calico-node-twvsd               2/2     Running   0          13h
calico-typha-666749994b-d68qg   1/1     Running   0          13h
coredns-8567978547-dhbn4        1/1     Running   0          14h
coredns-8567978547-zv5w5        1/1     Running   0          14h
etcd-yiwu                       1/1     Running   0          13h
kube-apiserver-yiwu             1/1     Running   0          13h
kube-controller-manager-yiwu    1/1     Running   0          13h
kube-proxy-7pjcx                1/1     Running   0          13h
kube-proxy-96d2j                1/1     Running   0          13h
kube-proxy-j5cnw                1/1     Running   0          14h
kube-scheduler-yiwu             1/1     Running   0          13h

Это два модуля, которые я использовал для проверки удобства использования.

kubectl get pods -owide

NAME             READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
nginx-ds-2br6j   1/1     Running   0          13h   111.111.1.2   linan   <none>           <none>
nginx-ds-t7sfv   1/1     Running   0          13h   111.111.2.2   node2   <none>           <none>

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

[root@YiWu ~]# ping 111.111.1.2
PING 111.111.1.2 (111.111.1.2) 56(84) bytes of data.
^C
--- 111.111.1.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

[root@YiWu ~]# ping 111.111.2.2
PING 111.111.2.2 (111.111.2.2) 56(84) bytes of data.
^C
--- 111.111.2.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

Каждый узел может получить доступ только к модулям на своем собственном хосте.

Я проверил журнал узлов ситца, этот журнал появляется на некоторых узлах, а на некоторых - нет.

Иу

bird: BGP: Unexpected connect from unknown address 172.19.0.1 (port 56754)
bird: BGP: Unexpected connect from unknown address 172.19.0.1 (port 40364)

узел2

bird: BGP: Unexpected connect from unknown address 172.22.203.11 (port 57996)
bird: BGP: Unexpected connect from unknown address 172.22.203.11 (port 59485)

Linan

no

Я устанавливаю статус узла проверки calicoctl в узле YiWu

DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get node -owide

NAME    ASN         IPV4            IPV6   
linan   (unknown)   172.18.0.1/16          
node2   (unknown)   172.20.0.1/16          
yiwu    (unknown)   172.19.0.1/16 
DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl node status 
Calico process is running.

IPv4 BGP status
+--------------+-------------------+-------+----------+--------------------------------+
| PEER ADDRESS |     PEER TYPE     | STATE |  SINCE   |              INFO              |
+--------------+-------------------+-------+----------+--------------------------------+
| 172.18.0.1   | node-to-node mesh | start | 12:23:15 | Connect                        |
| 172.20.0.1   | node-to-node mesh | start | 12:23:18 | OpenSent Socket: Connection    |
|              |                   |       |          | closed                         |
+--------------+-------------------+-------+----------+--------------------------------+

IPv6 BGP status
No IPv6 peers found.

РЕДАКТИРОВАТЬ

sysctl -p  /etc/sysctl.d/kubernetes.conf 

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
fs.inotify.max_user_watches = 89100

уже установлен IP-адрес для всех узлов


person Cliven    schedule 15.08.2019    source источник
comment
но я не могу пинговать ClusterIP с любого узла (включая главный) ... вы имеете в виду «111.111.1.2» , «111.111.2.2» - это ClusterIP? это IP-адреса Pod. И ClusterIP в обслуживании - это виртуальные IP-адреса, и их нельзя пинговать. Вы пробовали cat /proc/sys/net/ipv4/ip_forward?   -  person wineinlib    schedule 15.08.2019
comment
он возвращает 1, я уже выставил ip forward right.   -  person Cliven    schedule 15.08.2019


Ответы (2)


Я перезапустил бязь и проверил его журнал

kubectl delete-f /etc/kubernetes/addons/calico.yaml
kubectl apply -f /etc/kubernetes/addons/calico.yaml
kubectl get pods -n kube-system
kubectl log calico-node-dp69k -c calico-node -n kube-system

calico-node-dp69k - имя узла calico. Просмотрите журнал calico и обнаружите странную сетевую карту в качестве загрузочного сетевого адаптера. как показано ниже

2019-08-15 04:39:10.859 [INFO][8] startup.go 564: Using autodetected IPv4 address on interface br-b733428777f6: 172.19.0.1/16

очевидно br-b733428777f6 это не я ожидал

Я проверил документ конфигурации calico о IP_AUTODETECTION_METHOD

Калико по умолчанию будет использовать режим first-found для выбора сетевого интерфейса

Опция first-found перечисляет все IP-адреса интерфейсов и возвращает первый действительный IP-адрес (на основе версии IP и типа адреса) для первого действительного интерфейса.

В моем случае мне больше подходит can-reach

поэтому я редактирую calico.yaml и добавляю IP_AUTODETECTION_METHOD вот так:

spec:
  hostNetwork: true
  serviceAccountName: calico-node
  terminationGracePeriodSeconds: 0
  containers:
    - name: calico-node
      image: quay.io/calico/node:v3.1.3
      env:
        - name: IP_AUTODETECTION_METHOD
          value: can-reach=172.22.203.1

can-reach=172.22.203.1 из 172.22.203.1 - это IP шлюза, тогда

kubectl delete-f /etc/kubernetes/addons/calico.yaml
kubectl apply -f /etc/kubernetes/addons/calico.yaml

проверьте журнал:

2019-08-15 04:50:27.942 [INFO][10] reachaddr.go 46: Auto-detected address by connecting to remote Destination="172.22.203.1" IP=172.22.203.10

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="cali7b8c9bd2e1f"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="veth24c7125"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="br-0b07d34c53b5"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="172.18.0.1/16"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="tunl0"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="111.111.1.1/32"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="docker0"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="172.17.0.1/16"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="enp0s20u1u5"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno4"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno3"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno2"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno1"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="172.22.203.10/24"

2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 59: Found matching interface CIDR CIDR="172.22.203.10/24"

2019-08-15 04:50:27.943 [INFO][10] startup.go 590: Using autodetected IPv4 address 172.22.203.10/24, detected by connecting to 172.22.203.1

вау, он выбирает правильный интерфейс разработчика

проверьте, доступен ли IP-адрес модуля, Доступен!

сделано

person Cliven    schedule 15.08.2019
comment
Привет, вы упомянули 172.22.203.1 is gateway ip. Но ... что такое IP шлюза? Как мне его найти? Спасибо. - person Lam Le; 25.02.2021
comment
маршрут -n | grep 'UG [\ t]' | awk '{print $ 2}' - person tuxErrante; 30.03.2021

Для будущего гуглера. В моих случаях

Я использовал оператор:

apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  # Configures Calico networking.
  calicoNetwork:
    # Note: The ipPools section cannot be modified post-install.
    ipPools:
      - blockSize: 26
        cidr: 10.244.0.0/16 # your pod cidr 
        encapsulation: VXLANCrossSubnet
        natOutgoing: Enabled
        nodeSelector: all()
    nodeAddressAutodetectionV4:
      interface: ens* # Change this one to fix the autodetected issue. My interface is ensxxx

И почему-то, если это не сработает, и это потому, что вы могли раньше установить фланель, ресничку и т. Д.,

Сначала вам нужно удалить сетевой интерфейс.

ip link

Для каждого интерфейса для фланели выполните следующие действия.

ifconfig <name of interface from ip link> down

ip link delete <name of interface from ip link>

person maxisam    schedule 22.06.2020