|
| 1 | +--- |
| 2 | +title: ネットワークプラグイン |
| 3 | +content_type: concept |
| 4 | +weight: 10 |
| 5 | +--- |
| 6 | + |
| 7 | + |
| 8 | +<!-- overview --> |
| 9 | + |
| 10 | +Kubernetes {{< skew currentVersion >}}は、クラスターネットワーキングのために[Container Network Interface](https://github.com/containernetworking/cni) (CNI)プラグインをサポートしています。 |
| 11 | +クラスターと互換性があり、需要に合ったCNIプラグインを使用する必要があります。 |
| 12 | +様々なプラグイン(オープンソースあるいはクローズドソース)が幅広いKubernetesエコシステムで利用可能です。 |
| 13 | + |
| 14 | +[Kubernetesネットワークモデル](/ja/docs/concepts/services-networking/#the-kubernetes-network-model)を実装するには、CNIプラグインが必要です。 |
| 15 | + |
| 16 | +[v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md)以降のCNI仕様のリリースと互換性のあるCNIプラグインを使用する必要があります。 |
| 17 | +Kubernetesプロジェクトは、[v1.0.0](https://github.com/containernetworking/cni/blob/spec-v1.0.0/SPEC.md)のCNI仕様と互換性のあるプラグインの使用を推奨しています(プラグインは複数の仕様のバージョンに対応できます)。 |
| 18 | + |
| 19 | +<!-- body --> |
| 20 | + |
| 21 | +## インストール |
| 22 | + |
| 23 | +ネットワーキングの文脈におけるコンテナランタイムは、ノード上のデーモンであり、kubelet向けのCRIサービスを提供するように設定されています。 |
| 24 | +特に、コンテナランタイムは、Kubernetesネットワークモデルを実装するために必要なCNIプラグインを読み込むように設定する必要があります。 |
| 25 | + |
| 26 | +{{< note >}} |
| 27 | +Kubernetes 1.24以前は、CNIプラグインは`cni-bin-dir`や`network-plugin`といったコマンドラインパラメーターを使用してkubeletによって管理することもできました。 |
| 28 | +これらのコマンドラインパラメーターはKubernetes 1.24で削除され、CNIの管理はkubeletの範囲外となりました。 |
| 29 | + |
| 30 | +dockershimの削除に伴う問題に直面している場合は、[CNIプラグイン関連のエラーのトラブルシューティング](/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/)を参照してください。 |
| 31 | +{{< /note >}} |
| 32 | + |
| 33 | +コンテナランタイムがCNIプラグインをどのように管理しているかについての具体的な情報については、そのコンテナランタイムのドキュメントを参照してください。 |
| 34 | +例えば: |
| 35 | + |
| 36 | +- [containerd](https://github.com/containerd/containerd/blob/main/script/setup/install-cni) |
| 37 | +- [CRI-O](https://github.com/cri-o/cri-o/blob/main/contrib/cni/README.md) |
| 38 | + |
| 39 | +CNIプラグインのインストールや管理方法についての具体的な情報については、そのプラグインまたは[ネットワーキングプロバイダー](/ja/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-network-model)のドキュメントを参照してください。 |
| 40 | + |
| 41 | +## ネットワークプラグインの要件 |
| 42 | + |
| 43 | + |
| 44 | +### ループバックCNI |
| 45 | + |
| 46 | +Kubernetesネットワークモデルを実装するためにノードにインストールされたCNIプラグインに加えて、Kubernetesはコンテナランタイムにループバックインターフェース`lo`を提供することも要求します。 |
| 47 | +これは各サンドボックス(Podサンドボックス、VMサンドボックスなど)に使用されます。 |
| 48 | +ループバックインターフェースの実装は、[CNIループバックプラグイン](https://github.com/containernetworking/plugins/blob/master/plugins/main/loopback/loopback.go)を再利用するか、自分で実装することで達成できます(例: [CRI-Oを用いた例](https://github.com/cri-o/ocicni/blob/release-1.24/pkg/ocicni/util_linux.go#L91))。 |
| 49 | + |
| 50 | +### hostPortのサポート |
| 51 | + |
| 52 | +CNIネットワーキングプラグインは`hostPort`をサポートしています。 |
| 53 | +CNIプラグインチームが提供する公式の[portmap](https://github.com/containernetworking/plugins/tree/master/plugins/meta/portmap)プラグインを使用するか、ポートマッピング(portMapping)機能を持つ独自のプラグインを使用できます。 |
| 54 | + |
| 55 | +`hostPort`サポートを有効にする場合、`cni-conf-dir`で`portMappings capability`を指定する必要があります。 |
| 56 | +例: |
| 57 | + |
| 58 | +```json |
| 59 | +{ |
| 60 | + "name": "k8s-pod-network", |
| 61 | + "cniVersion": "0.4.0", |
| 62 | + "plugins": [ |
| 63 | + { |
| 64 | + "type": "calico", |
| 65 | + "log_level": "info", |
| 66 | + "datastore_type": "kubernetes", |
| 67 | + "nodename": "127.0.0.1", |
| 68 | + "ipam": { |
| 69 | + "type": "host-local", |
| 70 | + "subnet": "usePodCidr" |
| 71 | + }, |
| 72 | + "policy": { |
| 73 | + "type": "k8s" |
| 74 | + }, |
| 75 | + "kubernetes": { |
| 76 | + "kubeconfig": "/etc/cni/net.d/calico-kubeconfig" |
| 77 | + } |
| 78 | + }, |
| 79 | + { |
| 80 | + "type": "portmap", |
| 81 | + "capabilities": {"portMappings": true}, |
| 82 | + "externalSetMarkChain": "KUBE-MARK-MASQ" |
| 83 | + } |
| 84 | + ] |
| 85 | +} |
| 86 | +``` |
| 87 | + |
| 88 | +### トラフィックシェーピングのサポート |
| 89 | + |
| 90 | +**これは実験的な機能です** |
| 91 | + |
| 92 | +CNIネットワーキングプラグインは、Podの入出力トラフィックシェーピングにも対応しています。 |
| 93 | +CNIプラグインチームが提供する公式の[bandwidth](https://github.com/containernetworking/plugins/tree/master/plugins/meta/bandwidth)プラグインを使用するか、帯域制御機能を持つ独自のプラグインを使用できます。 |
| 94 | + |
| 95 | +トラフィックシェーピングのサポートを有効にする場合、`bandwidth`プラグインをCNIの設定ファイル(デフォルトは`/etc/cni/net.d`)に追加し、バイナリがCNIのbinディレクトリ(デフォルトは`/opt/cni/bin`)に含まれていることを確認する必要があります。 |
| 96 | + |
| 97 | +```json |
| 98 | +{ |
| 99 | + "name": "k8s-pod-network", |
| 100 | + "cniVersion": "0.4.0", |
| 101 | + "plugins": [ |
| 102 | + { |
| 103 | + "type": "calico", |
| 104 | + "log_level": "info", |
| 105 | + "datastore_type": "kubernetes", |
| 106 | + "nodename": "127.0.0.1", |
| 107 | + "ipam": { |
| 108 | + "type": "host-local", |
| 109 | + "subnet": "usePodCidr" |
| 110 | + }, |
| 111 | + "policy": { |
| 112 | + "type": "k8s" |
| 113 | + }, |
| 114 | + "kubernetes": { |
| 115 | + "kubeconfig": "/etc/cni/net.d/calico-kubeconfig" |
| 116 | + } |
| 117 | + }, |
| 118 | + { |
| 119 | + "type": "bandwidth", |
| 120 | + "capabilities": {"bandwidth": true} |
| 121 | + } |
| 122 | + ] |
| 123 | +} |
| 124 | +``` |
| 125 | + |
| 126 | +これでPodに`kubernetes.io/ingress-bandwidth`と`kubernetes.io/egress-bandwidth`のアノテーションを追加できます。 |
| 127 | +例: |
| 128 | + |
| 129 | +```yaml |
| 130 | +apiVersion: v1 |
| 131 | +kind: Pod |
| 132 | +metadata: |
| 133 | + annotations: |
| 134 | + kubernetes.io/ingress-bandwidth: 1M |
| 135 | + kubernetes.io/egress-bandwidth: 1M |
| 136 | +... |
| 137 | +``` |
| 138 | + |
| 139 | +## {{% heading "whatsnext" %}} |
| 140 | + |
| 141 | +- [クラスターのネットワーク](/ja/docs/concepts/cluster-administration/networking/)についてさらに学ぶ |
| 142 | +- [ネットワークポリシー](/ja/docs/concepts/services-networking/network-policies/)についてさらに学ぶ |
| 143 | +- [CNIプラグインに関連するエラーのトラブルシューティング](/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/)について学ぶ |
0 commit comments