例: Calicoのインストールおよびネットワーク・ポリシーの設定

Kubernetesネットワーキング・モデルは、コンテナ(ポッド)にクラスタ内で一意のルーティング可能なIPアドレスがあることを前提としています。Kubernetesネットワーキング・モデルでは、コンテナがクラスタ内の同じノードにデプロイされているか、別のノードにデプロイされているかに関係なく、コンテナはこれらのIPアドレスを使用して相互に通信します。Container Networking Interface (CNI)は、コンテナがIPアドレスを使用してネットワーキングと通信できるようにするAPIです。

デフォルトでは、ポッドは任意のソースからトラフィックを受け入れます。クラスタ・セキュリティを強化するために、ポッドをネットワーク・ポリシー(Kubernetes NetworkPolicyリソース)で選択することによって分離できます。ネットワーク・ポリシーは、ポッドのグループが相互および他のネットワーク・エンドポイントと通信できる方法の仕様です。NetworkPolicyリソースは、ラベルを使用してポッドを選択し、選択したポッドに許可されるトラフィックを指定するルールを定義します。クラスタ・ネームスペースのNetworkPolicyが特定のポッドを選択すると、そのポッドはどのNetworkPolicyでも許可されていない接続を拒否します。NetworkPolicyによって選択されていないネームスペース内の他のポッドは、引き続きすべてのトラフィックを受け入れます。ネットワーク・ポリシーの詳細は、Kubernetesのドキュメントを参照してください。

ネットワーク・ポリシーは、CNIネットワーク・プロバイダによって実装されます。CNIネットワーク・プロバイダを実装せずにNetworkPolicyリソースを作成しても、まったく影響はありません。すべてのCNIネットワーク・プロバイダがNetworkPolicyリソースを実装するわけではないことに注意してください。

Container Engine for Kubernetesで作成するクラスタには、デフォルトのCNIネットワーク・プロバイダとしてflannelがインストールされます。flannelは、IPアドレスをコンテナにアタッチすることにより、Kubernetesネットワーキング・モデルの要件を満たす単純なオーバーレイ仮想ネットワークです。flannelの詳細は、flannelのドキュメントを参照してください。

flannelは、Kubernetesネットワーキング・モデルの要件を満たしていますが、NetworkPolicyリソースはサポートしていません。ネットワーク・ポリシーを実装してContainer Engine for Kubernetesで作成するクラスタのセキュリティを強化する場合は、NetworkPolicyリソースをサポートするネットワーク・プロバイダをインストールして構成する必要があります。そのようなプロバイダの1つがCalicoです(他のネットワーク・プロバイダのリストは、Kubernetesのドキュメントを参照)。Calicoは、コンテナ、仮想マシンおよびネイティブ・ホストベースのワークロード向けのオープン・ソースのネットワーキングおよびネットワーク・セキュリティのソリューションです。Calicoの詳細は、Calicoのドキュメントを参照してください。

Container Engine for Kubernetesを使用して作成したクラスタに、flannelとともにCalicoを手動でインストールできます。

ノート

  • オープン・ソースのCalicoの使用のみがサポートされています。Calico Enterpriseの使用はサポートされていません。

  • ポッドがすでに実行されている既存のノード・プールがあるクラスタにCalicoをインストールする場合、Calicoのインストールが完了したらポッドを再作成する必要があります。たとえば、kubectl rollout restartコマンドを実行します。クラスタにノード・プールを作成する前にCalicoをクラスタにインストールすると(推奨)、再作成するポッドがないことを確認できます。

Calicoの手動でのインストール

Container Engine for Kubernetes (コンソールまたはAPIのいずれかを使用)を使用してクラスタを作成した後で、ネットワーク・ポリシーをサポートするために、(flannelとともに)クラスタにCalicoをインストールできます。

便宜上、Calicoのインストール手順は、Calicoバージョン3.10に基づいて下に記載されています。Calicoのインストール手順は、Calicoのバージョンによって異なります。様々なバージョンのCalicoのインストールに関する情報は、ネットワーク・ポリシー施行専用のCalicoのインストールに関するCalicoのドキュメントを常に参照してください。

  1. まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
  2. ターミナル・ウィンドウで、次のように入力して、Kubernetes APIデータストアのCalicoポリシーのみのマニフェストをダウンロードします:

    curl https://docs.projectcalico.org/v3.10/manifests/calico-policy-only.yaml -o calico.yaml

    インストールするCalicoのバージョンによって、URLが異なることに注意してください。特定のバージョンのCalicoをインストールする手順は、Calicoのドキュメントを参照してください。

  3. calico.yamlファイルには、ポッドCIDRブロック値への複数の参照が含まれています。ダウンロードされたcalico.yamlファイルでは、ポッドCIDRブロック値は最初、192.168.0.0/16に設定されています。Container Engine for Kubernetesで作成されたクラスタのポッドCIDRブロック値が192.168.0.0/16である場合は、このステップをスキップします。ただし、Container Engine for Kubernetesで作成されたクラスタのポッドCIDRブロック値が異なる値(10.244.0.0/16のデフォルト値など)の場合は、calico.yamlファイルの初期値を変更する必要があります。次のステップは、そのための1つの方法を示しています:

    1. 環境変数の値をポッドCIDRブロック値に設定します。たとえば、次のようなコマンドを入力します:

      export POD_CIDR="10.244.0.0/16"
    2. calico.yamlファイルのデフォルト値192.168.0.0/16を、Container Engine for Kubernetesで作成されたクラスタの実際のポッドCIDRブロック値に置き換えます。たとえば、次のようなコマンドを入力します:

      sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml
  4. calico.yamlファイルはcalico-typhaという名前のデプロイメントを定義しており、デフォルトではレプリカ数は1です。大規模なクラスタまたは本番環境では、このデフォルトのレプリカ数を変更することを検討してください。Calicoでは次が推奨されます:

    • 200ノードごとに少なくとも1つのレプリカ(最大20個)。
    • ローリング・アップグレードと障害の影響を軽減するために、本番環境に最低3つのレプリカ(レプリカ数は常にノード数より少なくする必要があります。そうしないと、ローリング・アップグレードが停止します)。

    レプリカ数を変更するには、テキスト・エディタでcalico.yamlファイルを開き、replicas設定の値を変更します:

    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: calico-typha
      ...
    spec:
      ...
      replicas: <number-of-replicas>

    レプリカ数を設定する方法は、インストールしたCalicoのバージョンによって異なります。インストールしたバージョンのレプリカ数を設定する方法については、Calicoのドキュメントを参照してください。

  5. 次のコマンドを入力して、Calicoをインストールして構成します:

    kubectl apply -f calico.yaml

ネットワーク・ポリシーの設定

Container Engine for Kubernetesで作成したクラスタにCalicoをインストールしたら、Kubernetes NetworkPolicyリソースを作成して、必要に応じてポッドを分離できます。

NetworkPolicyの例およびその使用方法は、Calicoのドキュメントを参照してください。具体的には:

例は、インストールしたCalicoのバージョンによって異なります。