例: 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のポッド・サブネットに接続します。As a result, pod IP addresses within a VCN are directly routable from other VCNs connected (peered) to that VCN, and from on-premise networks.「ポッド・ネットワーク用の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 CNIプラグインのかわりにCalicoをインストールできます(「flannel CNIプラグインのかわりにCalicoをインストールする」を参照)。ただし、CNIプラグインをflannelからCalicoに変更することは、後でクラスタに作成される新しいノードにのみ適用されます。したがって、既存のワーカー・ノードがすでにあるクラスタでは、flannelをCalicoに置き換えないことをお薦めします。
Calicoの互換性
この表は、OracleがKubernetes Engineを使用して作成されたクラスタで正常にテストしたCalicoネットワーク・プラグインのバージョンを示しています。Oracleでは、テストに成功したCalicoバージョンのみがサポートされています。この表は、Calicoバージョンごとに、成功したテストでクラスタで実行されていたKubernetesバージョンを示しています。
オープン・ソースのCalicoの使用のみがサポートされていることに注意してください。Calico Enterpriseの使用はサポートされていません。
詳細は、例: Calicoのインストールおよびネットワーク・ポリシーの設定を参照してください。
Calicoバージョン | Kubernetes 1.29を実行しているクラスタでテスト(およびサポート)されますか。 | Kubernetes 1.30を実行しているクラスタでテスト(およびサポート)されますか。 | Kubernetes 1.31を実行しているクラスタでテスト(およびサポート)されますか。 | Kubernetes 1.32を実行しているクラスタでテスト(およびサポート)されますか。 |
---|---|---|---|---|
3.25.1 | (未テスト) | (未テスト) | (未テスト) | (未テスト) |
3.26.1 | (未テスト) | (未テスト) | (未テスト) | (未テスト) |
3.26.4 | (未テスト) | (未テスト) | (未テスト) | (未テスト) |
3.27.2 | はい | (未テスト) | (未テスト) | (未テスト) |
3.28.0 | (未テスト) | はい | (未テスト) | (未テスト) |
3.28.2 | (未テスト) | (未テスト) | はい | (未テスト) |
3.29.2 | (未テスト) | (未テスト) | (未テスト) | はい |
Flannel CNIプラグインの代わりにCalicoをインストールする
Kubernetes Engineを使用して(コンソールまたはAPIを使用して)拡張クラスタを作成し、ネットワーク・タイプとしてチャネル・オーバーレイを選択した後、クラスタにCalicoをインストールしてネットワーク・ポリシーをサポートできます。
Flannel CNIプラグインの代わりにCalicoをインストールする前に、まずflannel CNIプラグインを無効にする必要があります。CNIプラグインをflannelからCalicoに変更すると、クラスタに後で作成される新しいノードにのみ適用されます。したがって、既存のワーカー・ノードがすでにあるクラスタでは、flannelをCalicoに置き換えないことをお薦めします。
便宜上、Calicoのインストール手順を次に示します。Calicoのインストール手順は、Calicoのバージョンによって異なります。様々なバージョンのCalicoのインストールに関する情報は、常にCalicoのインストレーション・ドキュメントを参照してください。
-
flannel CNIプラグイン・クラスタ・アドオンを無効にします。「クラスタ・アドオンの無効化(および削除」を参照してください。
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
- 次のように入力して、kube-systemネームスペースからflannelデーモンセットを削除します。
kubectl delete -n kube-system daemonset kube-flannel-ds
-
ターミナル・ウィンドウで、次を入力して、Kubernetes APIデータストアのCalicoマニフェストをダウンロードします:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -o calico.yaml
インストールするCalicoのバージョンによって、URLが異なることに注意してください。
- クラスタ内のワーカー・ノードにOracle Linux 8イメージを選択した場合は、次のように
calico.yaml
ファイルで追加の環境変数を設定します。- 選択したテキスト・エディタで
calico.yaml
ファイルを開きます。 -
calico-node
DaemonSetマニフェストのマニフェストで、calico-node
コンテナのenv
セクションに次の環境変数を追加します。- name: FELIX_IPTABLESBACKEND value: "NFT"
- 変更した
calico.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.28.0/manifests/calico-policy-only.yaml -o calico-policy-only.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: sys-fs hostPath: path: /sys/fs/ type: DirectoryOrCreate - name: bpffs hostPath: path: /sys/fs/bpf type: Directory # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs. - name: nodeproc hostPath: path: /proc # 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: sys-fs hostPath: path: /sys/fs/ type: DirectoryOrCreate - name: bpffs hostPath: path: /sys/fs/bpf type: Directory # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs. - name: nodeproc hostPath: path: /proc # 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.28.0 imagePullPolicy: IfNotPresent env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Configure route aggregation based on pod CIDR. - name: USE_POD_CIDR value: "true" # 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" # Cluster type to identify the deployment type - name: CLUSTER_TYPE value: "k8s" # Non-calico CNI, disable credential management. - name: CALICO_MANAGE_CNI value: "false" # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Set Felix endpoint to host default action to ACCEPT. - name: FELIX_DEFAULTENDPOINTTOHOSTACTION value: "ACCEPT" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: FELIX_HEALTHENABLED value: "true" ...
変更後、
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.28.0 imagePullPolicy: IfNotPresent env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Configure route aggregation based on pod CIDR. - name: USE_POD_CIDR value: "true" # 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" # Cluster type to identify the deployment type - name: CLUSTER_TYPE value: "k8s" # Non-calico CNI, disable credential management. - name: CALICO_MANAGE_CNI value: "false" # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Set Felix endpoint to host default action to ACCEPT. - name: FELIX_DEFAULTENDPOINTTOHOSTACTION value: "ACCEPT" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: FELIX_HEALTHENABLED value: "true" - 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-policy-only.yaml
ネットワーク・ポリシーの設定
Kubernetes Engineで作成したクラスタにCalicoをインストールしたら、Kubernetes NetworkPolicyリソースを作成して、必要に応じてポッドを分離できます。
NetworkPolicyの例およびその使用方法は、Calicoのドキュメントを参照してください。具体的には:
例は、インストールしたCalicoのバージョンによって異なります。