CNIの責務https://github.com/containernetworking/cni/blob/master/SPEC.md“A CNI pluginis responsible for inserting a network interface into thecontainer network namespace (e.g. one end of a veth pair) andmaking any necessary changes on the host (e.g. attaching the otherend of the veth into a bridge).It should then assign the IP to the interface and setup the routesconsistent with the IP Address Management section by invokingappropriate IPAM plugin”
Azure CNI Pluginバイナリの置き場所root@aks-default-40839087-vmss000000:/#ll /opt/cni/bin/total 136816drwxr-xr-x 2 root root 4096 Feb 22 00:31 ./drwxr-xr-x 3 root root 4096 Feb 22 00:31 ../-rwxr-xr-x 1 root root 27844608 Dec 15 16:13 azure-vnet*-rwxr-xr-x 1 root root 28065792 Dec 15 16:13 azure-vnet-ipam*-rwxr-xr-x 1 root root 28065792 Dec 15 16:13 azure-vnet-ipamv6*-rwxr-xr-x 1 root root 5926912 Dec 15 16:13 azure-vnet-telemetry*-rwxr-xr-x 1 root root 184 Dec 15 16:17 azure-vnet-telemetry.config*-rwxr-xr-x 1 root root 4028260 Aug 13 2019 bridge*-rwxr-xr-x 1 root root 10232415 Aug 13 2019 dhcp*-rwxr-xr-x 1 root root 2856252 Aug 13 2019 flannel*-rwxr-xr-x 1 root root 3127363 Aug 13 2019 host-device*-rwxr-xr-x 1 root root 3036768 Aug 13 2019 host-local*-rwxr-xr-x 1 root root 3572685 Aug 13 2019 ipvlan*[snip]
29.
(補足)Azure CNI Plugin以外のコンポーネントPod– Deployment として動くコンポーネント% k get deploy --all-namespaces -o namedeployment.apps/fluxdeployment.apps/flux-memcacheddeployment.apps/helm-operatordeployment.apps/gatekeeper-auditdeployment.apps/gatekeeper-controllerdeployment.apps/aks-linkdeployment.apps/azure-policydeployment.apps/azure-policy-webhookdeployment.apps/corednsdeployment.apps/coredns-autoscalerdeployment.apps/metrics-serverdeployment.apps/omsagent-rs[aks-link]マネージドサービス空間にあるMasterとNodeの間とVPNを張り、kubectl execなど、Master側からのインバウンド通信を実現する
30.
(補足) Azure CNIPlugin以外のコンポーネントPod – DaemonSet として動くコンポーネント% k get ds --all-namespaces -o namedaemonset.apps/azure-cni-networkmonitordaemonset.apps/azure-ip-masq-agentdaemonset.apps/azure-npmdaemonset.apps/kube-proxydaemonset.apps/omsagentdaemonset.apps/omsagent-win[azure-cni-networkmonitor]ネットワーク定義と現状のチェックを行う(NATルールなど)[azure-ip-masq-agent]iptablesを操作し、IPマスカレード対象/除外アドレス範囲を指定する[azure-npm]ネットワークポリシを実現する(ポリシエンジンとしてCalicoも選択可能)[kube-proxy]API Serverを継続的にウォッチし、ネットワーク関連イベントをNodeに適用する(iptablesへのEndpoint追加/削除など)[Source Code]azure-cni-networkmonitor https://github.com/Azure/azure-container-networking/tree/master/cnmsazure-npm https://github.com/Azure/azure-container-networking/tree/master/npmip-masq-agentとkube-proxyはkubernetes upstream
31.
(補足)iptables IP-MASQ-AGENT チェインクラスタ内通信はIPマスカレードしないroot@aks-default-40839087-vmss000000:/#iptables -t nat -L IP-MASQ-AGENTChain IP-MASQ-AGENT (1 references)target prot opt source destinationRETURN all -- anywhere 10.0.0.0/8 /* ip-masq-agent: local trafficis not subject to MASQUERADE */RETURN all -- anywhere 10.240.0.0/16 /* ip-masq-agent: local trafficis not subject to MASQUERADE */RETURN all -- anywhere 10.0.0.0/16 /* ip-masq-agent: local trafficis not subject to MASQUERADE */MASQUERADE all -- anywhere anywhere /* ip-masq-agent: outboundtraffic is subject to MASQUERADE (must be last in chain) */
ホスト名前空間のIPアドレスIPv4root@aks-default-40839087-vmss000000:/# ip -finet a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaultqlen 1000inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group defaultqlen 1000inet 10.240.0.4/16 brd 10.240.255.255 scope global eth0valid_lft forever preferred_lft foreverNodeのプライマリIPアドレス
ホスト名前空間のインタフェイスインタフェイスとリンクroot@aks-default-40839087-vmss000000:/# ip -flink a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaultqlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group defaultqlen 1000link/ether 00:0d:3a:ce:6f:5a brd ff:ff:ff:ff:ff:ff4: azvbdb1c4944b1@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueuestate UP group default qlen 1000link/ether ea:18:de:a3:29:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0[snip]ネットワーク名前空間ID: 0とリンクしている
ホスト名前空間のルートroot@aks-default-40839087-vmss000000:/# ip rdefaultvia 10.240.0.1 dev eth0 proto dhcp src 10.240.0.4 metric 10010.240.0.0/16 dev eth0 proto kernel scope link src 10.240.0.410.240.0.6 dev azva9397a1bc49 proto static10.240.0.7 dev azv8eed0080cd7 proto static10.240.0.15 dev azvb8eb335c1b9 proto static10.240.0.20 dev azv2e65b540f01 proto static[snip]10.240.0.78 dev azvf7167fe07b1 proto static10.240.0.79 dev azv72bac978d69 proto static10.240.0.83 dev azvb33dc95ce90 proto static10.240.0.86 dev azvb4f8cd7ad4c proto static10.240.0.88 dev azvbdb1c4944b1 proto static10.240.0.104 dev azva76d1269bcf proto static168.63.129.16 via 10.240.0.1 dev eth0 proto dhcp src 10.240.0.4 metric 100169.254.169.254 via 10.240.0.1 dev eth0 proto dhcp src 10.240.0.4 metric 100各Podへの静的L3ルートを持っている