Kubergnetesはflannelを使ってホストにまたがる通信の注意点をします.

3743 ワード

私達はdockerの二つの本体の間の容器が直接通信できないことを知っています.
Kubergnetesも自分でこの問題を解決していません.
私たちがKubergnetesを展開する時は、flannelやcalicoプラグインによる解決策が多く使われます.
ここではこの二つの解決案を比べません.これはあなたが選ぶ前に自分で知るべきです.
ここでは主に個人がflannelを使ってネット解決案を作る時に出会う問題と注意事項について話します.
flannelのhost-gwモードを使っています.簡単に言えば、flannelで自動的にいくつかのホストのルート戦略を作って、容器間通信を完成します.
具体的な詳細はKubergnetesの権威ガイドのネット原理章節を見に行きます.
これはETcdに書き込まれたデータ配置です.鍵はこのhost-gwです.
    ${BIN DIR}/etcdctl}      --endpoints=$      --ca-file={KUBEROOT}/ssl/ca.pem\      --cert-file={KUBEROOT}/ssl/クベルnetes.pem\      --key-file={KUBEROOT}/ssl/クベルnetes-key.pem\
      mk${FLANNELKUETCDUPREFIX}/config\\"Network\\":\"\""、{CLUSTER×UCIDR}\"、\"SubnetLen\"::"Backend\"":\"Type\":\"host-gw\"///"dev/ull 2\"
二つ目の注意点はdockerがflannelから生成したネットワーク構成を引用することです.以下はdockerのsystem配置です.
[Unit]Description=Docer Appliation Continer Entine Docmentation=http://docs.docker.ioAfter=network.target docker-storge-setup.serviceWants=docker-storage-setup.service Type=notifyEvironment=-$//dockerd--log-level=error--log-opt max-size=50 m--log-opt max-file=3--data-root={KUBEROOT}/docker\          --selinux-enabled$          $DOCKER_STORAGE_OPTTIONS\          $DOCKER_NETWORK.OPTxecStartPost=/s bin/iptables-I FOREWARD-s 0.0.00/0-j ACCEPT Execreload=/bin/kill HUP-s HUP=on-failureRetart Sec=5 LimitNOLE=infinity LimitNPROC=inityfielit
このファイルを見ると変数の定義と使用の関係が分かります.
cat/run/flannel/docker
DOCKER_OPT_BIP=「--bip=172.30.89.1/24」
DOCKER_OPT_IPMASQ=「--ip-masq=true」
DOCKER_OPT_MTU=「--mtu=1500」
DOCKER_NETWORK.OPTTIONS=「--bip=172.30.89.1/24--ip-masq=true--mtu=1500」
flannelで生成した変数DOCKER_NETWORK.OPTONSネットワークのdocker 0ネットワークカードのデータがマッチングし、その後、flannelは対応するルーティングポリシーを生成してネットワークを通じて完了します.
癜ip addr 1:lo:mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00 00 00 bd 00:00:00:00:00:00
    inet 127..0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inett 6:1/128 scope host 
       valid_lft forever preferred_lft forever
2:eno 16780032:mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:b 4:79:2 b brad ff:ff:ff:ff:ff
    inet 10.239.51.140/27 bd 10.239.51.159 scope global eno 16780032
       valid_lft forever preferred_lft forever
    inete 6 fe 80:250:56 ff:feb 4:792 b/64 scope link 
       valid_lft forever preferred_lft forever
4:docker 0:mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:d 3:33:2 d:d 2 bd ff:ff:ff:ff:ff
    inet
172.30.89.1/24 bd 172.89.255 scope global docker 0
       valid_lft forever preferred_lft forever
これはルートポリシーです.本機のdocker容器は自分に転送され、その他は対応ホストのipに転送されます.
癜ip route showdefault via 10.239.51.129 dev eno 16780032 proto static metric 100 10.239.51.128/27 dev eno 16780032 プロトケネル scope link src 10.239.51.140 metric 100 172.30.00/24 via 10.239.51.143 dev eno 16780032 172.30.00/24 via 10.239.51.149 dev eno 16780032 172.30.00/24 via 10.239.51.139 dev eno 16780032 172.30.20/24 via 10.239.51.144 dev eno 16780032 172.30.48.0/24 via 10.239.51.145 dev eno 16780032 172.30.0/24 via 10.239.51.138 dev eno 16780032 172.30.67.0/24 via 10.239.51.141 dev eno 16780032 172.30.0/24 via 10.239.51.147 dev eno 16780032 172.30.0/24 via 10.239.51.146 dev eno 16780032 172.30.89.0/24 dev docker 0 プロトケネル scope link src 172.30.89.1 172.30.0/24 via 10.239.51.142 dev eno 16780032 172.30.0/24 via 10.239.51.148 dev eno 16780032 
三つ目のポイントはiptablesのルールをクリアすることです.これは最新のピットで、何の検査も正しいですが、pingは不通です.次のコマンドを使ってファイアウォールの削除を実行します.ファイアウォールをオフにしたら大丈夫です.私も以前はこう思っていましたが、ファイアウォールのルールをクリアしないとダメです.Kubenetesはiptablesに依存していますので、閉じられないです.
iptables-P INPUT ACCEPTiptables-P FOREWARD ACCEPTiptables-Fiptables-L-n