Movatterモバイル変換


[0]ホーム

URL:


Toru Makabe, profile picture
Uploaded byToru Makabe
PDF, PPTX2,886 views

細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive

細かすぎて伝わらないかもしれない

Embed presentation

Download as PDF, PPTX
Azure Container NetworkingDeep Dive真壁 徹日本マイクロソフト株式会社クラウドソリューションアーキテクト2021/02細かすぎて伝わらないかもしれない
この資料の目的と前提なぜ細かい話をするのかAzure Kubernetes ServiceにおけるAzure CNIを題材に、Azureのコンテナネットワーキングの構造や特徴を解説するマネージドサービスであっても、内部構造の理解は最適化や問題解決の助けとなる2021/2時点で公開されている、もしくはユーザが取得可能な情報にもとづく (GitHub、公式ドキュメント、Azure実環境、etc)公式ドキュメントを補完する (あわせて読むと理解が深まる)解説範囲はLinuxノード、Azure CNI関連要素とする
想定読者Azure Kubernetes Service (AKS)を利用したことがあるAzureの他コンテナ関連サービスを利用したことがあるAKS/Azureは利用したことがないが、そのコンテナネットワーク実装に関心があるLinuxのネットワーク機能と、それがKubernetesでどのように活用されているかに関心がある
お品書きKubernetesネットワーキング基礎AKSネットワークモデル (KubenetとAzure CNI)Azure CNI Deep Diveロードマップと将来の方向性あわせて読みたい
Kubernetesネットワーキング基礎
PodとIPアドレスPodはコンテナとボリュームをまとめる単位1つのPodに複数のコンテナやボリュームを含められるPodごとにIPアドレスを持つhttps://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/
Node、PodとIPアドレスNodeはPodを動かすサーバ(一般的には仮想マシンやベアメタルサーバ)Nodeで複数のPodを動かせるhttps://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/
なぜPodがIPを持つのか“すべてのPodは独自のIPアドレスを持ちます。これは、Pod間のリンクを明示的に作成する必要がなく、コンテナポートをホストポートにマッピングする必要がほとんどないことを意味します。こうすることで、ポート割り当て、名前解決、サービスディスカバリー、負荷分散、アプリケーション設定、および移行の観点から、PodをVMまたは物理ホストと同様に扱うことができる、クリーンで後方互換性のあるモデルを生み出しています”https://kubernetes.io/ja/docs/concepts/cluster-administration/networking/
Kubernetesのネットワーク要件ネットワーク実装はプラグインで拡張可能だが、守るべき要件があるノード上のPodが、NATなしですべてのノード上のすべてのPodと通信できることsystemdやkubeletなどノード上にあるエージェントが、そのノード上のすべてのPodと通信できることノードのホストネットワーク内のPodは、NATなしですべてのノード上のすべてのPodと通信できることhttps://kubernetes.io/ja/docs/concepts/cluster-administration/networking/[補足]KubernetesでNATが使われるケースはあります(Service -> Endpoint DNATなど)。ただしNATが認められない通信パターンがありますよ、ということです
2種類のプラグインKubernetesネットワーク[Kubenet Plugin]基本的なコンテナとネットワークの接続機能を提供Kubernetes/Linux限定Nodeを超えた通信は範囲外とするため、別途トンネリングなどを組み合わせる必要がある[CNI Plugin]CNI = Container NetworkInterface多様なコンテナランタイム、オーケストレータとネットワークの接続を標準化する仕様、リファレンス実装CNCFプロジェクト
CNIhttps://github.com/containernetworking/cniKubernetes向けが活発だが、Kubernetes限定ではないクラウドサービス、 OSS、商用SDN製品などネットワーク実装に合わせたプラグインがある(Azure、AWS VPC、Calico、Flannel、Cilium、NSX-Tなど)
CNIの責務https://github.com/containernetworking/cni/blob/master/SPEC.md“A CNI plugin is 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”
CNI Specificationhttps://github.com/containernetworking/cni/blob/master/SPEC.mdCNIプラグインは、コンテナ作成/削除などに合わせ、仮想NICをはじめとするネットワーク要素の操作を行う4つの操作(ADD、DEL、CHECK、VERSION)が定義されている必要に応じてIPAMと連動し、IPアドレスの割り当てや開放を行う
Kubernetes/containerdの実装例https://github.com/containerd/cri/blob/release/1.4/docs/architecture.md
AKSネットワークモデル
2種類のネットワークモデルAzure Kubernetes Service ネットワーク[Kubenet]Kubernetesの基本モデルNode間通信などKubenetの足りない機能をAzure SDNで補完PodはPod CIDR範囲のIPを持つが、他Node向け通信はAzure VNetのユーザ定義ルート(UDR)を使う[Azure CNI]Azure SDN向けCNI PluginPodはAzure VNet/SubnetのIPを持つネットワークポリシなどAzureVNetの機能と統合しやすいこの資料でDeep Diveする対象
(参考: Azure Kubernetes ServiceにおけるKubenet実装)Pod CIDRはAzure VNetから隠蔽されている(VNetがIPを管理しない)
どちらのモデルを選択するかhttps://docs.microsoft.com/ja-jp/azure/aks/concepts-network決め手になることもある(後述)
どちらのモデルを選択するかhttps://docs.microsoft.com/ja-jp/azure/aks/concepts-network機能ではAzure CNI >Kubenet経験上、 Azure CNIのほうがAzure VNetとの統合、新機能への対応が早い傾向はある
どちらのモデルを選択するかhttps://mehighlow.medium.com/aks-kubenet-vs-azure-cni-363298dd53bfiperfによるNode間スループットの測定結果に大きな差はなし若干Azure CNIのスループットが高いベンチマークの他にワークロードがない条件での測定だが、参考にAKS Standard_DS2_v2 Node
どちらのモデルを選択するかAzure CNIが機能と性能でやや優れるが、IPアドレス空間が決め手でKubenetを選択するケースもあるオンプレミスや他VNetとの接続など、AKSのIPアドレス空間を分離できない、十分なIPアドレスを確保できないユースケースで顕著ただしAzure CNIでIPアドレス数の問題を解決する取り組みはあるため、後述のロードマップも確認のうえ、ご検討を
Azure CNI Deep Dive
実環境で確認していきますAKS version: v.1.20.2Node pool: Standard_F2s_v2 * 3Container Runtime: containerdMax Pods per Node: 100Network Plugin: Azure (Azure CNI)Network Policy: AzureNetwork Mode: TransparentVNet Address Space: 10.0.0.0/8Node pool subnet: 10.240.0.0/16Service CIDR: 10.0.0.0/16
既定はブリッジモードからL3透過モードへこの資料はL3透過モード(Transparent)を説明従来、AKSではPodネットワーク名前空間をL2ブリッジに接続するモードが既定よりシンプルなL3透過(Transparent)モードへのシフト2021/1/4リリースからTransparentモードが既定にhttps://docs.microsoft.com/ja-jp/azure/aks/faq#what-is-azure-cni-transparent-mode-vs-bridge-mode
Master NodeState store(etcd)SchedulerkubeletContainerRuntimeAPI ServerAPIsController ManagerControllersAzureAPINodeFeatures/Configskube-proxyDeveloper/Admin(**)DaemonSetなど上位オブジェクトの表現は割愛AdmissionWebhook(*)(*)Podに配置されるケースもあるAKS ハイレベルアーキテクチャとネットワーク関連コンポーネントPods(**)AzureCNIiptables/ebtables(Netfilter) など
Azure CNI Pluginkubelet設定root@aks-default-40839087-vmss000000:/# cat /etc/default/kubeletKUBELET_FLAGS=--address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --azure-container-registry-config=/etc/kubernetes/azure.json --cgroups-per-qos=true --client-ca-file=/etc/kubernetes/certs/ca.crt --cloud-config=/etc/kubernetes/azure.json --cloud-provider=azure --cluster-dns=10.0.0.10 --cluster-domain=cluster.local --dynamic-config-dir=/var/lib/kubelet --enforce-node-allocatable=pods --event-qps=0 --eviction-hard=memory.available<750Mi,nodefs.available<10%,nodefs.inodesFree<5% --feature-gates=RotateKubeletServerCertificate=true --image-gc-high-threshold=85 --image-gc-low-threshold=80 --image-pull-progress-deadline=30m --keep-terminated-pod-volumes=false --kube-reserved=cpu=100m,memory=1024Mi --kubeconfig=/var/lib/kubelet/kubeconfig --max-pods=100 --network-plugin=cni --node-status-update-frequency=10s --non-masquerade-cidr=0.0.0.0/0 --pod-infra-container-image=mcr.microsoft.com/oss/kubernetes/pause:1.3.1 --pod-manifest-path=/etc/kubernetes/manifests --pod-max-pids=-1 --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --rotate-certificates=false --streaming-connection-idle-timeout=4h --tls-cert-file=/etc/kubernetes/certs/kubeletserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --tls-private-key-file=/etc/kubernetes/certs/kubeletserver.key[snip]CNIを使う宣言
Azure CNI Plugin設定root@aks-default-40839087-vmss000000:/# cat /etc/cni/net.d/10-azure.conflist{"cniVersion":"0.3.0","name":"azure","plugins":[{"type":"azure-vnet","mode":"transparent","ipsToRouteViaHost":["169.254.20.10"],"ipam":{"type":"azure-vnet-ipam"}},{"type":"portmap","capabilities":{"portMappings":true},"snat":true}]}どのCNI 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]
(補足)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側からのインバウンド通信を実現する
(補足) Azure CNI Plugin以外のコンポーネント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
(補足)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) */
構成要素をひとつずつ確認していきましょう
Node一覧調査対象を決定% k get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGEKERNEL-VERSION CONTAINER-RUNTIMEaks-default-40839087-vmss000000 Ready agent 7h48m v1.20.2 10.240.0.4 <none> Ubuntu18.04.5 LTS 5.4.0-1036-azure containerd://1.4.3+azureaks-default-40839087-vmss000001 Ready agent 7h48m v1.20.2 10.240.0.105 <none> Ubuntu18.04.5 LTS 5.4.0-1036-azure containerd://1.4.3+azureaks-default-40839087-vmss000002 Ready agent 7h48m v1.20.2 10.240.0.206 <none> Ubuntu18.04.5 LTS 5.4.0-1036-azure containerd://1.4.3+azureこのNodeにsshして調査します
対象Nodeで実行中のPodPodとIPの一覧% k get po --all-namespaces -o "custom-columns=:.metadata.name,:.spec.nodeName,:.status.podIP"|grepdefault-40839087-vmss000000nsenter-xan42b aks-default-40839087-vmss000000 10.240.0.4aks-link-6f99b65544-v6d8v aks-default-40839087-vmss000000 10.240.0.6azure-cni-networkmonitor-99gfr aks-default-40839087-vmss000000 10.240.0.4azure-ip-masq-agent-4wdg4 aks-default-40839087-vmss000000 10.240.0.4azure-npm-njjp4 aks-default-40839087-vmss000000 10.240.0.4azure-policy-5c5b4c689b-m5qqr aks-default-40839087-vmss000000 10.240.0.104azure-policy-webhook-f64bcd58b-xl8xc aks-default-40839087-vmss000000 10.240.0.86coredns-autoscaler-5b6cbd75d7-v8f6t aks-default-40839087-vmss000000 10.240.0.83coredns-b94d8b788-gdlcz aks-default-40839087-vmss000000 10.240.0.79kube-proxy-76tlh aks-default-40839087-vmss000000 10.240.0.4metrics-server-77c8679d7d-4tfcc aks-default-40839087-vmss000000 10.240.0.53omsagent-hkm7d aks-default-40839087-vmss000000 10.240.0.88omsagent-rs-5c55d9bcc8-sf82n aks-default-40839087-vmss000000 10.240.0.78[snip]NodeのプライマリIPで動くPodもある(.spec.hostNetwork:true)
ネットワーク名前空間.spec.hostNetwork: false なPodの数だけ ネットワーク名前空間ができるroot@aks-default-40839087-vmss000000:/# ip netns lscni-32f79230-cba3-f2d7-10e2-3f3708ed515c (id: 10)cni-2eb82ed4-bf11-2e72-90ef-3d7a2373f719 (id: 11)cni-50a741fc-041a-1272-bef8-7bcb5b966f2e (id: 12)cni-74b75555-a1bc-494e-bfd9-845b22164eb9 (id: 9)cni-4232f09c-2549-eb26-c4a9-4c576b6a420b (id: 8)cni-1ac8daf0-60f5-bcfc-f317-92da73f908d8 (id: 7)cni-746c299d-03eb-17cc-42da-5027c5957b6d (id: 6)cni-ab01c222-18a6-b002-2c5d-1965a6450cb3 (id: 5)cni-098c1e60-bf8d-c9bf-1646-47f8e608e3db (id: 4)cni-e55890ee-8a42-f19d-ec95-da325db177c8 (id: 0)[snip]
?10.240.0.4/16Network namespace: cni-e55890ee-8a42-f19d-ec95-da325db177c8 (id: 0)Network namespace: hostPodOther NamespacesPodPodPodPodホストネットワーク名前空間とは別のネットワークスタックを持つ(ルート、iptablesチェインなど)
ホスト名前空間のIPアドレスIPv4root@aks-default-40839087-vmss000000:/# ip -f inet 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アドレス
eth010.240.0.4/16Network namespace: cni-e55890ee-8a42-f19d-ec95-da325db177c8 (id: 0)Network namespace: hostPodOther NamespacesPodPodPodPod
ホスト名前空間のインタフェイスインタフェイスとリンクroot@aks-default-40839087-vmss000000:/# ip -f link 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とリンクしている
eth010.240.0.4/16azvbdb1c4944b1@if3ea:18:de:a3:29:10Network namespace: cni-e55890ee-8a42-f19d-ec95-da325db177c8 (id: 0)Network namespace: hostPodOther NamespacesPodOther IFPodPodPod?
Pod名前空間のIPアドレスroot@aks-default-40839087-vmss000000:/# ip netns exec cni-e55890ee-8a42-f19d-ec95-da325db177c8 ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever3: eth0@if4: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether f6:a9:08:d9:cb:2a brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.240.0.88/16 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::f4a9:8ff:fed9:cb2a/64 scope linkvalid_lft forever preferred_lft foreverPodのネットワーク名前空間でコマンドを実行
eth010.240.0.4/16azvbdb1c4944b1@if3ea:18:de:a3:29:10Network namespace: cni-e55890ee-8a42-f19d-ec95-da325db177c8 (id: 0)eth0@if4f6:a9:08:d9:cb:2a10.240.0.88/16Network namespace: hostPodOther NamespacesPodOther IFOther IFPodPodPod
ホスト名前空間のルートroot@aks-default-40839087-vmss000000:/# ip rdefault via 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ルートを持っている
Pod名前空間のルートroot@aks-default-40839087-vmss000000:/# ip netns exec cni-e55890ee-8a42-f19d-ec95-da325db177c8 ip rdefault via 169.254.1.1 dev eth0 proto static169.254.1.1 dev eth0 proto static scope linkリンクローカルアドレスがデフォルトゲートウェイ
Pod名前空間のARPキャッシュroot@aks-default-40839087-vmss000000:/# ip netns exec cni-e55890ee-8a42-f19d-ec95-da325db177c8 ip n10.240.0.4 dev eth0 lladdr ea:18:de:a3:29:10 STALE169.254.1.1 dev eth0 lladdr ea:18:de:a3:29:10 PERMANENTホスト名前空間側インタフェイスのMACアドレス
Proxy ARPホスト名前空間側インタフェイスはProxy ARPを行うroot@aks-default-40839087-vmss000000:/# cat /proc/sys/net/ipv4/conf/azvbdb1c4944b1/proxy_arp1https://github.com/Azure/azure-container-networking/blob/v1.2.2_hotfix/network/transparent_endpointclient_linux.go
eth010.240.0.4/16azvbdb1c4944b1@if3ea:18:de:a3:29:10Proxy ARP 有効Network namespace: cni-e55890ee-8a42-f19d-ec95-da325db177c8 (id: 0)eth0@if4f6:a9:08:d9:cb:2a10.240.0.88/16Network namespace: hostPodOther NamespacesPodOther IFOther IFPodPodPodホスト側インタフェイスにIPアドレスは設定不要デフォルトルートはリンクローカルアドレス169.254.1.1(すべてのPodで共通)
ホスト名前空間のARPキャッシュroot@aks-default-40839087-vmss000000:/# ip n10.240.1.29 dev eth0 lladdr 12:34:56:78:9a:bc REACHABLE10.240.0.44 dev azvdb9fa0de861 lladdr fa:85:b2:1c:3e:f9 REACHABLE10.240.0.83 dev azvb33dc95ce90 lladdr 8e:09:66:32:69:34 REACHABLE10.240.0.86 dev azvb4f8cd7ad4c lladdr 92:13:97:a0:64:d9 STALE10.240.0.206 dev eth0 lladdr 12:34:56:78:9a:bc REACHABLE10.240.0.53 dev azv3c2e0bf260a lladdr a6:03:58:76:30:b4 REACHABLE10.240.0.1 dev eth0 lladdr 12:34:56:78:9a:bc REACHABLE10.240.0.158 dev eth0 lladdr 12:34:56:78:9a:bc REACHABLE10.240.0.241 dev eth0 lladdr 12:34:56:78:9a:bc STALE10.240.0.88 dev azvbdb1c4944b1 lladdr f6:a9:08:d9:cb:2a REACHABLE10.240.0.78 dev azvf7167fe07b1 lladdr 72:bb:37:02:5a:0f REACHABLE[snip]Nodeを超える場合、宛先MACアドレスはAzure SDNになる
IPアドレスの事前割り当てNode pool作成時に指定した Max podsの数だけ、Node作成時に割り当てられる
Podがなくても パケットはNodeへ届くAzure SDNは事前割り当てしたIPアドレスとNodeの対応を把握している% k get po –all-namespaces –o wide|grep 10.240.1.50root@aks-default-40839087-vmss000000:/# arping 10.240.1.50ARPING 10.240.1.5042 bytes from 12:34:56:78:9a:bc (10.240.1.50): index=0 time=385.605 usec42 bytes from 12:34:56:78:9a:bc (10.240.1.50): index=1 time=551.108 usec42 bytes from 12:34:56:78:9a:bc (10.240.1.50): index=2 time=322.404 usec[snip]root@aks-default-40839087-vmss000000:/# arping 10.240.1.51ARPING 10.240.1.51Timeout[snip]10.240.1.50はNode aks-default-40839087-vmss000002に割り当てられているが、Podには未割り当てAzure SDNが事前割り当てしたNodeのインタフェイスまで届けているまだNodeに割り当てられていないIPアドレスには届かない
ロードマップと将来の方向性
IPアドレス空間に余裕がなくても 使いやすくPod用VNet/Subnetの分離、動的IPアドレス割り当てhttps://github.com/Azure/AKS/issues/1788NodeのVNet/Subnetとは別にPod向けVNet/Subnetを指定できるようにまた、事前割り当てではなく、必要な時に割り当てられるように
IPアドレスの事前静的割り当て(現在)Azure CNI IPAM PluginがNodeに事前割り当てされたIPアドレスを利用するNetwork Control PlaneAzure ServerCluster OrchestratorNetwork Host AgentAzure ServerNetwork Host agentCNIContainer 1Container nOrchAgent…https://github.com/Azure/azure-container-networking/blob/v1.2.2_hotfix/ipam/azure.goシンプルで権限管理も容易だが、Nodeに事前割り当てされた範囲を超えて割り当てができない
動的割り当てを支える技術Delegated Network ControllerNetwork Control PlaneAzure ServerCluster OrchestratorDNC (Delegated Network Controller)Network Host AgentAzure ServerNetwork Host agentCNSContainer 1Container nOrchAgent…同様の技術はAzure App Serviceなどで、すでに使われているクラスタ全体で利用可能なPod IPアドレス空間の管理を、AKSマスタに委任(Delegation)する利用可能なIPアドレスを動的に取得、開放するDaemonSethttps://github.com/Azure/azure-container-networking/blob/v1.2.2_hotfix/cns/azure-cns.yaml
他ネットワークモデルの提供継続的に検証中https://github.com/Azure/AKS/issues/1846IPVSやCiliumなどの要望があり、継続的に検証を行っている現時点では大規模環境での検証で明らかになった課題が残っている
AKS 全体ロードマップhttps://github.com/Azure/AKS/projects/1
あわせて読みたい
関連ドキュメント、リポジトリのリンクあわせて読みたいAzure Kubernetes Service (AKS) でのアプリケーションに対するネットワークの概念Azure Kubernetes Service (AKS) クラスターのベースライン アーキテクチャAzure Kubernetes Service (AKS) でのネットワーク接続とセキュリティに関するベスト プラクティスAzure Kubernetes サービス (AKS) で Azure CNI ネットワークを構成する
関連ドキュメント、リポジトリのリンクあわせて読みたいクラスターのネットワークCNI - the Container Network InterfaceMicrosoft Azure Container Networking
© Copyright Microsoft Corporation. All rights reserved.

Recommended

PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
Docker Compose 徹底解説
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
Dockerからcontainerdへの移行
PPTX
コンテナネットワーキング(CNI)最前線
PDF
Infrastructure as Code (IaC) 談義 2022
PPTX
30分で分かる!OSの作り方
PDF
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
Ingress on Azure Kubernetes Service
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PPTX
「おうちクラウド」が今熱い!
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL 15の新機能を徹底解説
PDF
マルチテナント化で知っておきたいデータベースのこと
PPTX
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
PPTX
Dockerからcontainerdへの移行
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PDF
Azure Network 概要
PDF
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
PPTX
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
PDF
AlmaLinux と Rocky Linux の誕生経緯&比較
PPTX
Spanner移行について本気出して考えてみた
PPTX
Kubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみた
PDF
Xenとzfsで作る家庭内VDIサーバ
 
PDF
あらためて Azure virtual network
PDF
Azure Kubernetes Service Overview

More Related Content

PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
Docker Compose 徹底解説
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
Dockerからcontainerdへの移行
PPTX
コンテナネットワーキング(CNI)最前線
PDF
Infrastructure as Code (IaC) 談義 2022
PPTX
30分で分かる!OSの作り方
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Docker Compose 徹底解説
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Dockerからcontainerdへの移行
コンテナネットワーキング(CNI)最前線
Infrastructure as Code (IaC) 談義 2022
30分で分かる!OSの作り方

What's hot

PDF
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
Ingress on Azure Kubernetes Service
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PPTX
「おうちクラウド」が今熱い!
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL 15の新機能を徹底解説
PDF
マルチテナント化で知っておきたいデータベースのこと
PPTX
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
PPTX
Dockerからcontainerdへの移行
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PDF
Azure Network 概要
PDF
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
PPTX
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
PDF
AlmaLinux と Rocky Linux の誕生経緯&比較
PPTX
Spanner移行について本気出して考えてみた
PPTX
Kubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみた
PDF
Xenとzfsで作る家庭内VDIサーバ
 
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Ingress on Azure Kubernetes Service
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
「おうちクラウド」が今熱い!
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 15の新機能を徹底解説
マルチテナント化で知っておきたいデータベースのこと
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
Dockerからcontainerdへの移行
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Azure Network 概要
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
AlmaLinux と Rocky Linux の誕生経緯&比較
Spanner移行について本気出して考えてみた
Kubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみた
Xenとzfsで作る家庭内VDIサーバ
 

Similar to 細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive

PDF
あらためて Azure virtual network
PDF
Azure Kubernetes Service Overview
PPTX
これから始める Azure の基礎サービス: IaaS/PaaS
PDF
アダプティブ クラウド アプローチと Azure IoT Operations 概要
PPTX
Microsoft azure
PDF
de:code 2019 Cloud トラック 総まとめ!
PDF
AKS+KEDAで実現!Container Functions Pipeline
PDF
[Japan Tech summit 2017] DEP 005
PPTX
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
PPTX
Running Kubernetes on Azure
PDF
【de:code 2020】 Azure インフラ 最新アップデート!!
PDF
【de:code 2020】 Azure インフラ 最新アップデート!!
PDF
Kubernetes on Azure ~Azureで便利にKubernetesを利用する~
PPTX
Container x azure x kubernetes
PDF
202007 contrail cloud-operator-contrail_v1.2
PDF
Hccjp rancher+azurearc 201009
PDF
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
PDF
20190201 Cloud Native Kansai AKS Azure
PDF
Azure container as a service v0.1.19.1213
PPTX
Cld015 linux ベースでここまで
あらためて Azure virtual network
Azure Kubernetes Service Overview
これから始める Azure の基礎サービス: IaaS/PaaS
アダプティブ クラウド アプローチと Azure IoT Operations 概要
Microsoft azure
de:code 2019 Cloud トラック 総まとめ!
AKS+KEDAで実現!Container Functions Pipeline
[Japan Tech summit 2017] DEP 005
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
Running Kubernetes on Azure
【de:code 2020】 Azure インフラ 最新アップデート!!
【de:code 2020】 Azure インフラ 最新アップデート!!
Kubernetes on Azure ~Azureで便利にKubernetesを利用する~
Container x azure x kubernetes
202007 contrail cloud-operator-contrail_v1.2
Hccjp rancher+azurearc 201009
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
20190201 Cloud Native Kansai AKS Azure
Azure container as a service v0.1.19.1213
Cld015 linux ベースでここまで

More from Toru Makabe

PDF
Demystifying Identities for Azure Kubernetes Service
PDF
ZOZOTOWNのCloud Native Journey
PDF
Azure Blueprints - 企業で期待される背景と特徴、活用方法
PDF
ミッション : メガクラウドを安全にアップデートせよ!
PDF
インフラ野郎AzureチームProX
PDF
インフラ野郎 Azureチーム at クラウド boost
PDF
半日でわかる コンテナー技術 (入門編)
PDF
俺とHashiCorp
PDF
Essentials of container
PDF
Resilience Engineering on Kubernetes
PDF
Azure Kubernetes Service 2019 ふりかえり
PDF
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
PDF
ダイ・ハード in the Kubernetes world
PDF
半日でわかる コンテナー技術 (応用編)
PDF
Real World Azure RBAC
PDF
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
PDF
俺の Kubernetes Workflow with HashiStack
PDF
インフラ廻戦 品川事変 前夜編
PDF
Ops meets NoOps
PDF
NoOps Japan Community 1st Anniversary 祝辞
Demystifying Identities for Azure Kubernetes Service
ZOZOTOWNのCloud Native Journey
Azure Blueprints - 企業で期待される背景と特徴、活用方法
ミッション : メガクラウドを安全にアップデートせよ!
インフラ野郎AzureチームProX
インフラ野郎 Azureチーム at クラウド boost
半日でわかる コンテナー技術 (入門編)
俺とHashiCorp
Essentials of container
Resilience Engineering on Kubernetes
Azure Kubernetes Service 2019 ふりかえり
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
ダイ・ハード in the Kubernetes world
半日でわかる コンテナー技術 (応用編)
Real World Azure RBAC
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
俺の Kubernetes Workflow with HashiStack
インフラ廻戦 品川事変 前夜編
Ops meets NoOps
NoOps Japan Community 1st Anniversary 祝辞

細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive


[8]ページ先頭

©2009-2025 Movatter.jp