例: Calicoのインストールおよびネットワーク・ポリシーの設定
Kubernetes Engine (OKE)を使用して作成したクラスタにCalicoをインストールし、ネットワーク・ポリシーを設定する方法をご覧ください。
Kubernetesネットワーキング・モデルは、コンテナ(ポッド)にクラスタ内で一意のルーティング可能なIPアドレスがあることを前提としています。Kubernetesネットワーキング・モデルでは、コンテナがクラスタ内の同じノードにデプロイされているか、別のノードにデプロイされているかに関係なく、コンテナはこれらのIPアドレスを使用して相互に通信します。Kubernetesは、ネットワーク・リソース管理用のコンテナ・ネットワーク・インタフェース(CNI)仕様を採用しています。CNIは、Linuxコンテナでネットワーク・インタフェースを構成するためのプラグインを記述するための仕様およびライブラリと、サポートされている多数のプラグインで構成されます。
デフォルトでは、ポッドは任意のソースからトラフィックを受け入れます。クラスタ・セキュリティを強化するために、ポッドをネットワーク・ポリシー(Kubernetes NetworkPolicyリソース)で選択することによって分離できます。ネットワーク・ポリシーは、ポッドのグループが相互および他のネットワーク・エンドポイントと通信できる方法の仕様です。NetworkPolicyリソースは、ラベルを使用してポッドを選択し、選択したポッドに許可されるトラフィックを指定するルールを定義します。クラスタ・ネームスペースのNetworkPolicyが特定のポッドを選択すると、そのポッドはどのNetworkPolicyでも許可されていない接続を拒否します。NetworkPolicyによって選択されていないネームスペース内の他のポッドは、引き続きすべてのトラフィックを受け入れます。ネットワーク・ポリシーの詳細は、Kubernetesのドキュメントを参照してください。
ネットワーク・ポリシーは、CNIネットワーク・プロバイダによって実装されます。CNIネットワーク・プロバイダを実装せずにNetworkPolicyリソースを作成しても、まったく影響はありません。すべてのCNIネットワーク・プロバイダがNetworkPolicyリソースを実装するわけではないことに注意してください。
Kubernetesエンジンを使用してクラスタを作成する場合は、ネットワーク・タイプを選択します。選択した「ネットワーク・タイプ」によって、ポッド・ネットワーキングに使用されるCNIネットワーク・プロバイダおよび関連するCNIプラグインが次のように決定されます。
- VCNネイティブ・ポッド・ネットワーク: OCI VCNネイティブ・ポッド・ネットワークCNIプラグインを使用して、Oracle Cloud Infrastructure VCNのポッド・サブネットにワーカー・ノードを接続します。その結果、VCN内のポッドIPアドレスは、そのVCNに接続(ピアリング)されている他のVCN、オンプレミス・ネットワーク、およびインターネットから直接ルーティングできます。「ポッド・ネットワーク用のOCI VCNネイティブ・ポッド・ネットワークCNIプラグインの使用」を参照してください。
- Flannelオーバーレイ: Flannel CNIプラグインを使用して、IPアドレスをコンテナに接続する単純なプライベート・オーバーレイ仮想ネットワークであるflannelオーバーレイ・ネットワーク内のポッド間の通信をカプセル化します。プライベート・オーバーレイ・ネットワークのポッドには、同じクラスタ内の他のポッドからのみアクセスできます。「ポッド・ネットワーク用のFlannel CNIプラグインの使用」を参照してください。
OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインとflannel CNIプラグインの両方がKubernetesネットワーキング・モデルの要件を満たしていますが、いずれもKubernetes NetworkPolicyリソースをサポートしていません。ネットワーク・ポリシーを実装してKubernetes Engineで作成するクラスタのセキュリティを強化する場合は、クラスタ内のNetworkPolicyリソースをサポートするネットワーク・プロバイダをインストールして構成する必要があります。そのようなプロバイダの1つがCalicoです(他のネットワーク・プロバイダのリストは、Kubernetesのドキュメントを参照)。
Calicoは、コンテナ、仮想マシンおよびネイティブ・ホストベースのワークロード向けのオープン・ソースのネットワーキングおよびネットワーク・セキュリティのソリューションです。Calicoの詳細は、Calicoのドキュメントを参照してください。
- Calicoは、管理対象ノード・プールで使用できますが、仮想ノード・プールでは使用できません。
-
オープン・ソースのCalicoの使用のみがサポートされています。Calico Enterpriseの使用はサポートされていません。
- flannelの場合、ポッドがすでに実行されている既存のノード・プールがあるクラスタにCalicoをインストールする場合、Calicoのインストールが完了したらポッドを再起動する必要があります。たとえば、
kubectl rollout restart
コマンドを実行します。クラスタにノード・プールを作成する前にCalicoをクラスタにインストールすると(推奨)、再起動するポッドがないことを確認できます。
Calicoの互換性
この表は、OracleがKubernetes Engineを使用して作成されたクラスタで正常にテストしたCalicoネットワーク・プラグインのバージョンを示しています。Oracleでは、テストに成功したCalicoバージョンのみがサポートされています。この表は、Calicoバージョンごとに、成功したテストでクラスタで実行されていたKubernetesバージョンを示しています。
オープン・ソースのCalicoの使用のみがサポートされていることに注意してください。Calico Enterpriseの使用はサポートされていません。
詳細は、例: Calicoのインストールおよびネットワーク・ポリシーの設定を参照してください。
Calicoバージョン | Kubernetes 1.28を実行しているクラスタでテスト(およびサポート)されますか。 | Kubernetes 1.29を実行しているクラスタでテスト(およびサポート)されますか。 | Kubernetes 1.30を実行しているクラスタでテスト(およびサポート)されますか。 | Kubernetes 1.31を実行しているクラスタでテスト(およびサポート)されますか。 |
---|---|---|---|---|
3.25.1 | (未テスト) | (未テスト) | (未テスト) | (未テスト) |
3.26.1 | (未テスト) | (未テスト) | (未テスト) | (未テスト) |
3.26.4 | はい | (未テスト) | (未テスト) | (未テスト) |
3.27.2 | (未テスト) | はい | (未テスト) | (未テスト) |
3.28.0 | (未テスト) | (未テスト) | はい | (未テスト) |
3.28.2 | (未テスト) | (未テスト) | (未テスト) | はい |
Flannel CNIプラグインの代わりにCalicoをインストールする
Kubernetes Engine (コンソールまたはAPIを使用)を使用してクラスタを作成し、「ネットワーク・タイプ」として「flannel overay」を選択した後で、ネットワーク・ポリシーをサポートするために、クラスタにCalicoをインストールできます。Flannel CNIプラグインの代わりにCalicoをインストールする前に、まずflannel CNIプラグインを無効にする必要があります。
便宜上、Calicoのインストール手順を次に示します。Calicoのインストール手順は、Calicoのバージョンによって異なります。様々なバージョンのCalicoのインストールに関する情報は、常にCalicoのインストレーション・ドキュメントを参照してください。
-
flannel CNIプラグインを無効にします。
flannel CNIプラグインを無効にする方法は、次のように、クラスタが拡張クラスタか基本クラスタのどちらであるかによって異なります。
- 拡張クラスタ:チャネルCNIプラグイン・クラスタ・アドオンを無効にします。クラスタ・アドオンの無効化(および削除)を参照してください。
- 基本クラスタ:クラスタ内のノード・プールを更新して、次のKubernetesラベルを追加します:
oci.oraclecloud.com/custom-k8s-networking=true
「管理対象ノード・プールの更新」を参照してください。Kubernetesラベルは、基本クラスタ内のすべてのノード・プール(将来クラスタに追加されるノード・プールを含む)に追加する必要があることに注意してください。
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
-
ターミナル・ウィンドウで、次のように入力して、Kubernetes APIデータストアのCalicoポリシーのみのマニフェストをダウンロードします:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-policy-only.yaml -o calico.yaml
インストールするCalicoのバージョンによって、URLが異なることに注意してください。
- calico-policy-only.yamlファイルに追加の環境変数を1つ以上設定する必要があります。
- 選択したテキスト・エディタでcalico-policy-only.yamlファイルを開きます。
calico-node
DaemonSetのマニフェストに、calico-node
コンテナの次の環境変数を追加します。CALICO_MANAGE_CNI="true"
FELIX_IPTABLESBACKEND="NFT"
ノート:この環境変数を追加するのは、クラスタ内のワーカー・ノードにOracle Linux 8イメージを選択した場合のみです。
変更を行う前に、
calico-node
DaemonSetマニフェストのcalico-node
コンテナ環境変数(env:
)セクションは次のようになります。... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false"
変更後、
calico-node
DaemonSetマニフェストのcalico-node
コンテナ環境変数(env:
)セクションが次のようになっていることを確認します。... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: CALICO_MANAGE_CNI value: "true" - name: FELIX_IPTABLESBACKEND value: "NFT" ...
- 変更した
calico-policy-only.yaml
ファイルを保存して閉じます。
-
次のコマンドを入力して、Calicoをインストールして構成します:
kubectl apply -f calico.yaml
OCI VCNネイティブ・ポッド・ネットワークCNIプラグインとともにCalicoをインストールしています
Kubernetesエンジンを使用して(コンソールまたはAPIを使用して)クラスタを作成し、ネットワーク・タイプとしてVCNネイティブ・ポッド・ネットワーキングを選択した後、ネットワーク・ポリシーをサポートするために、OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインとともにクラスタにCalicoをインストールできます。
便宜上、Calicoのインストール手順を次に示します。Calicoのインストール手順は、Calicoのバージョンによって異なります。様々なバージョンのCalicoのインストールに関する情報は、常にCalicoのインストレーション・ドキュメントを参照してください。
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
-
ターミナル・ウィンドウで、次のように入力して、Kubernetes APIデータストアのCalicoポリシーのみのマニフェストをダウンロードします:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-policy-only.yaml -o calico.yaml
インストールするCalicoのバージョンによって、URLが異なることに注意してください。
- calico-policy-only.yamlファイルには、OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインとともにCalicoを使用する場合には必要ないCalicoコンポーネントが含まれているため、これらのコンポーネントを削除する必要があります。追加の環境変数も設定する必要があります。
- 選択したテキスト・エディタでcalico-policy-only.yamlファイルを開きます。
calico-node
DaemonSetのマニフェストからinitContainers
セクションを削除します。calico-node
DaemonSetのマニフェストから、calico-node
コンテナのenv
セクションから次を削除します。# Typha support: controlled by the ConfigMap. - name: FELIX_TYPHAK8SSERVICENAME valueFrom: configMapKeyRef: name: calico-config key: typha_service_name
calico-node
コンテナの次のenvFrom
セクションをcalico-node
DaemonSetのマニフェストから削除します。envFrom: - configMapRef: # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode. name: kubernetes-services-endpoint optional: true
calico-node
DaemonSetのマニフェストのvolumes
セクションから次のボリュームを削除します。cni-bin-dir
cni-net-dir
cni-log-dir
変更を行う前に、
calico-node
DaemonSetマニフェストのvolumes
セクションは次のようになります。... volumes: # Used by calico-node. - name: lib-modules hostPath: path: /lib/modules - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib/calico - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate - name: sysfs hostPath: path: /sys/fs/ type: DirectoryOrCreate # Used to install CNI. - name: cni-bin-dir hostPath: path: /opt/cni/bin - name: cni-net-dir hostPath: path: /etc/cni/net.d # Used to access CNI logs. - name: cni-log-dir hostPath: path: /var/log/calico/cni # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
変更後、
calico-node
DaemonSetマニフェストのvolumes
セクションが次のようになっていることを確認します。... volumes: # Used by calico-node. - name: lib-modules hostPath: path: /lib/modules - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib/calico - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate - name: sysfs hostPath: path: /sys/fs/ type: DirectoryOrCreate # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
calico-node
DaemonSetのマニフェスト内のcalico-node
コンテナのvolumeMounts
セクションから、次のボリューム・マウントを削除します。cni-net-dir
(関連するコメント# For maintaining CNI plugin API credentials.
を含む)cni-log-dir
変更を行う前に、
volumeMounts
セクションは次のようになります。... volumeMounts: # For maintaining CNI plugin API credentials. - mountPath: /host/etc/cni/net.d name: cni-net-dir readOnly: false - mountPath: /lib/modules name: lib-modules readOnly: true - mountPath: /run/xtables.lock name: xtables-lock readOnly: false - mountPath: /var/run/calico name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: policysync mountPath: /var/run/nodeagent # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the # parent directory. - name: bpffs mountPath: /sys/fs/bpf - name: cni-log-dir mountPath: /var/log/calico/cni readOnly: true ...
変更後、
volumeMounts
セクションが次のようになっていることを確認します。... volumeMounts: - mountPath: /lib/modules name: lib-modules readOnly: true - mountPath: /run/xtables.lock name: xtables-lock readOnly: false - mountPath: /var/run/calico name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: policysync mountPath: /var/run/nodeagent # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the # parent directory. - name: bpffs mountPath: /sys/fs/bpf ...
calico-node
DaemonSetのマニフェストに、calico-node
コンテナの次の環境変数を追加します。FELIX_INTERFACEPREFIX="oci"
NO_DEFAULT_POOLS="true"
FELIX_CHAININSERTMODE="Append"
FELIX_IPTABLESMANGLEALLOWACTION="Return"
FELIX_IPTABLESBACKEND="NFT"
ノート:この環境変数を追加するのは、クラスタ内のワーカー・ノードにOracle Linux 8イメージを選択した場合のみです。
変更を行う前に、
calico-node
DaemonSetマニフェストのcalico-node
コンテナ環境変数(env:
)セクションは次のようになります。... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false"
変更後、
calico-node
DaemonSetマニフェストのcalico-node
コンテナ環境変数(env:
)セクションが次のようになっていることを確認します。... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.25.1 env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" - name: CLUSTER_TYPE value: "k8s" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_LOGSEVERITYSCREEN value: "Info" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" # Configuration for Native Pod Networking - name: FELIX_INTERFACEPREFIX value: "oci" - name: NO_DEFAULT_POOLS value: "true" - name: FELIX_CHAININSERTMODE value: "Append" - name: FELIX_IPTABLESMANGLEALLOWACTION value: "Return" - name: FELIX_IPTABLESBACKEND value: "NFT" ...
- 変更した
calico-policy-only.yaml
ファイルを保存して閉じます。
-
次のコマンドを入力して、Calicoをインストールして構成します:
kubectl apply -f calico.yaml
ネットワーク・ポリシーの設定
Kubernetes Engineで作成したクラスタにCalicoをインストールしたら、Kubernetes NetworkPolicyリソースを作成して、必要に応じてポッドを分離できます。
NetworkPolicyの例およびその使用方法は、Calicoのドキュメントを参照してください。具体的には:
例は、インストールしたCalicoのバージョンによって異なります。