У нас есть несколько виртуальных машин vmware с установленным RHEL 7.6, недавно все они были перезагружены из-за перемещения центра обработки данных.
Проблема в том, что после перезагрузки некоторые приложения, такие как Java, kube-proxy слушают только сокеты tcp6, что странно. Даже я перезапускаю эти приложения, они по-прежнему слушают только сокеты tcp6, мне нужно добавить аргументы jvm java.net.preferIPv4Stack=true
чтобы он снова слушал сокеты ipv4. но для kube-proxy (прокси кластера kubernetes) я не нашел решения.
Я видел, как люди говорят, что tcp6 подразумевает tcp, однако я не могу получить доступ к этим сокетам с адресом ipv4.
у меня вопрос: что может вызвать это? Я не хочу отключать ipv6, просто предпочитаю ipv4.
[root@ocrpoc1 ~]# telnet 127.0.0.1 32414
Trying 127.0.0.1...
^C
[root@ocrpoc1 ~]# telnet 127.0.0.1 6443
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^ZConnection closed by foreign host.
[root@ocrpoc1 ~]# netstat -apn | grep kube-proxy
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 5282/kube-proxy
tcp 0 0 X.X.X.X:60458 X.X.X.X:6443 ESTABLISHED 5282/kube-proxy
tcp6 0 0 :::10256 :::* LISTEN 5282/kube-proxy
tcp6 0 0 :::32414 :::* LISTEN 5282/kube-proxy
[root@ocrpoc1 ~]# nc -4 -lk 32414
Ncat: bind to 0.0.0.0:32414: Address already in use. QUITTING.
[root@ocrpoc1 ~]# nc -6 -lk 32414
Ncat: bind to :::32414: Address already in use. QUITTING.
В случае оказания помощи другие люди могут столкнуться с этой проблемой.
это вызвано ситцем. по умолчанию calico выбирает IPv4-адрес, используя метод "autodetect", что означает "первый найденный" интерфейс с действительным IPv4-адресом.
один узел моего кластера kubernetes создал некий контейнер докеров с помощью docker-compose, который приносит интерфейсы моста br-XXXXX, контейнер calico-node выбирает его при запуске.
чтобы исправить это, я отредактировал Calico-node DaemonSet, добавив следующую переменную env:
имя: IP_AUTODETECTION_METHOD значение: может достигнуть =мой главный IP-узел Kubernetes