web-dev-qa-db-ja.com

RedHat 7.6、再起動すると、アプリケーションはtcp6ソケットでのみリッスンします

RHEL 7.6がインストールされたvmware仮想マシンがいくつかありますが、最近、データセンターの移動場所が原因ですべてが再起動しました。

問題は、再起動後、Javaなどの一部のアプリケーションが、kube-proxyがtcp6ソケットでのみリッスンすることです。これは奇妙なことです。これらのアプリケーションを再起動しても、tcp6ソケットでのみリッスンするため、jvm引数を追加する必要がありますJava.net.preferIPv4Stack=trueipv4ソケットで再度リッスンできるようにします。しかし、kube-proxy(kubernetes cluster proxy)の場合、解決策が見つかりません。

私は人々が言うのを見ました、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.
1
WestFarmer

他の人を助けるためにこの問題に遭遇するかもしれません。

それはカリコによって引き起こされます。デフォルトでは、calicoは「autodetect」メソッドを使用してIPv4アドレスを選択します。これは、有効なipv4アドレスを持つ「最初に見つかった」インターフェースを意味します。

私のkubernetesクラスターの1つのノードが、docker-composeによっていくつかのdockerコンテナーを作成しました。これにより、ブリッジインターフェイスbr-XXXXXが提供され、calico-nodeコンテナーは起動時にそれを選択します。

これを修正するために、次の環境変数を追加するcalico-nodeDaemonSetを編集しました。

名前:IP_AUTODETECTION_METHOD値:can-reach = my kubernetes master node ip

1
WestFarmer