Calico アドオンのインストール - Amazon EKS

Calico アドオンのインストール

Project Calico は、Kubernetes のネットワークポリシーエンジンです。Calico ネットワークポリシーの実施によって、ネットワークのセグメンテーションとテナントの隔離を実装できます。これは、マルチテナント環境でテナントを相互に分離する必要がある場合や、開発、ステージング、本稼働用に個別の環境を構築する場合に便利です。ネットワークポリシーは、ネットワークの入力および出力ルールを作成できる点で AWS セキュリティグループと似ています。インスタンスをセキュリティグループに割り当てるのではなく、ポッドセレクタとラベルを使用してネットワークポリシーをポッドに割り当てます。

考慮事項

  • Amazon EKS で Fargate を使用する場合、Calico はサポートされません。

  • Calico がノード上の iptables に追加するルールは、Calico の外部で既に実装した既存のルールより優先度が高い可能性があります。Calico ポリシーの外部のルールが Calico に上書きされるのを防ぐため、既存の iptables ルールを Calico ポリシーに追加することを検討してください。

  • ポッドのセキュリティグループを使っている場合、ブランチネットワークインターフェイス上のポッドへのトラフィックフローは Calico ネットワークポリシーの適用の対象にはならず、Amazon EC2 セキュリティグループの適用に限定されます。この制限を取り除くために、コミュニティの取り組みが進行中です。

前提条件

  • 既存の Amazon EKS クラスター。デプロイするには、Amazon EKS の使用開始を参照してください。

  • コンピュータまたは AWS CloudShell に kubectl コマンドラインツールがインストールされていること。バージョンは、クラスターのバージョンと同じか、2 つ後までのバージョンである必要があります。kubectl をインストールまたはアップグレードする方法については、「kubectl のインストール」を参照してください。

以下の手順では、 Amazon EKS クラスターの Linux ノードに Calico をインストールする方法を示しています。Windows ノードに Calico をインストールするには、「Amazon EKS Windows コンテナでの Calico の使用」を参照してください。

Calico を Amazon EKS Linux ノードにインストールする

Helm またはマニフェストの手順を使用して Calico をインストールできます。マニフェストは Amazon EKS によって更新されないため、チャートは Tigera によって維持されるため、Helm を使用することをお勧めします。

Amazon EKS は、Amazon EKS クラスターで新しい Tigera オペレータと Calico の機能をテストおよび検証しません。Calico のインストールおよび使用中に問題が発生した場合は、Tigera Operator および Calico Project に直接に問題を送信してください。クラスターにインストールする前に、Tigera Operator と Calico の新しいバージョンの互換性については、常に Tigera にお問い合わせください。

Helm

前提条件

Helm バージョン 3.0 以降がコンピュータにインストールされていることが必要です。Helm をインストールまたは更新する方法については、「Amazon EKS での Helm の使用」を参照してください。

Calico に Helm をインストールするには

  1. プロジェクト Calico を Helm リポジトリに追加します。

    helm repo add projectcalico https://docs.projectcalico.org/charts
  2. Calico をすでに追加している場合は、最新のリリース版を入手するために更新することをお勧めします。

    helm repo update
  3. バージョン 3.21.4 以降の Tigera Calico オペレータおよびカスタムリソース定義をインストールします。

    helm install calico projectcalico/tigera-operator --version v3.21.4
  4. tigera-operator 名前空間内のリソースを表示します。

    kubectl get all -n tigera-operator

    出力

    replicasetDESIRED 列と READY 列の値が一致するはずです。返された値は、以下の出力の values とは異なります。

    NAME READY STATUS RESTARTS AGE pod/tigera-operator-c4b9549c7-h4zp5 1/1 Running 0 110m ... NAME DESIRED CURRENT READY AGE replicaset.apps/tigera-operator-c4b9549c7 1 1 1 2m35s
  5. calico-system 名前空間内のリソースを表示します。

    kubectl get all -n calico-system

    出力

    calico-node daemonsetDESIRED 列と READY 列の値が一致するはずです。二つの replicasetsDESIREDREADY 列の値も一致するはずです。返された値は、以下の出力の values とは異なります

    NAME READY STATUS RESTARTS AGE pod/calico-kube-controllers-579b45dcf-z5tsf 1/1 Running 0 100m pod/calico-node-v9dhf 1/1 Running 0 100m pod/calico-typha-6f9c6786d-f2mc7 1/1 Running 0 100m ... NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/calico-node 1 1 1 1 1 kubernetes.io/os=linux 100m ... NAME DESIRED CURRENT READY AGE replicaset.apps/calico-kube-controllers-579b45dcf 1 1 1 100m replicaset.apps/calico-typha-6f9c6786d 1 1 1 100m
  6. calico-nodecalico-typha、および tigera-operator のいずれかのポッドのログに ERROR が含まれていないことを確認します。次のコマンドの値を前のステップの出力で返された値に置き換えます。

    kubectl logs tigera-operator-c4b9549c7-h4zp5 -n tigera-operator | grep ERROR kubectl logs calico-node-v9dhf -n calico-system | grep ERROR kubectl logs calico-typha-6f9c6786d-f2mc7 -n calico-system | grep ERROR

    前のコマンドからの出力が返されない場合、ERROR はログに存在せず、すべてが正しく実行されているはずです。

Manifests
重要

これらのチャートは今後維持されません。Helm チャートは維持されるため、代わりに Helm を使用してインストールすることをお勧めします。

マニフェストを使用して Calico をインストールするには

  1. Calico マニフェストをクラスターに適用します。このマニフェストは、calico-system 名前空間にデーモンセットを作成します。

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml
  2. calico-system 名前空間内のリソースを表示します。

    kubectl get daemonset calico-node --namespace calico-system

    出力

    DESIRED 列と READY 列の値は一致するはずです。返された値は、以下の出力の values とは異なります。

    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE calico-node 1 1 1 1 1 kubernetes.io/os=linux 26m

Stars Policy デモ

このセクションでは、Project Calico のドキュメントで提供されている Stars ポリシー デモ について説明われており、クラスター上での Calico 機能には必要ありません。このデモでは、Amazon EKS クラスターにフロントエンド、バックエンド、およびクライアントサービスを作成します。また、このデモでは、各サービス間で利用可能な入力および出力のパスを示す管理グラフィカルユーザーインターフェースが作成されます。実稼働ワークロードを実行しないクラスターでデモを完了することをお勧めします。

ネットワークポリシーを作成する前に、サービスはすべて、双方向に通信できます。ネットワークポリシーを適用すると、クライアントはフロントエンドサービスとのみ通信でき、バックエンドはフロントエンドからのみトラフィックを受け付けます。

Stars Policy デモを実行するには

  1. フロントエンド、バックエンド、クライアント、および管理ユーザーインターフェイスサービスを適用します。

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
  2. クラスター上のすべてのポッドを表示します。

    kubectl get pods --all-namespaces

    出力

    出力では、次の出力に示す名前空間にポッドが表示されます。READY 列内のポッドの NAMES と、ポッドの数 は、次の出力とは異なります。似たような名前のポッドが見えて、それらがすべて STATUS 列内に Running を持つまで続けないでください。

    NAMESPACE NAME READY STATUS RESTARTS AGE ... client client-xlffc 1/1 Running 0 5m19s ... management-ui management-ui-qrb2g 1/1 Running 0 5m24s stars backend-sz87q 1/1 Running 0 5m23s stars frontend-cscnf 1/1 Running 0 5m21s ...
  3. 管理ユーザーインターフェイスに接続するには、ローカルポート 9001 をクラスター上で実行されている management-ui サービスに転送します。

    kubectl port-forward service/management-ui -n management-ui 9001
  4. ローカルシステムでブラウザを開き、http://localhost:9001/ を指定します。管理ユーザーインターフェイスが表示されます。[C] ノードはクライアントサービス、[F] ノードはフロントエンドサービス、[B] ノードはバックエンドサービスを表します。各ノードには、太字の色付きの行で示されるように、他のすべてのノードへの完全な通信アクセスが含まれます。

    
                        オープンネットワークポリシー
  5. 相互にサービスを分離するには、次のネットワークポリシーを適用します。

    kubectl apply -n stars -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml kubectl apply -n client -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
  6. ブラウザを更新します。管理ユーザーインターフェイスはノードに到達できなくなるため、ユーザーインターフェイスに表示されないことがわかります。

  7. 管理ユーザーインターフェイスがサービスにアクセスできるように、次のネットワークポリシーを適用します。

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml
  8. ブラウザを更新します。管理ユーザーインターフェイスは再びノードにアクセスできますが、ノードは相互に通信できないことがわかります。

    
                        UI アクセスネットワークポリシー
  9. フロントエンドサービスからバックエンドサービスへのトラフィックを許可するには、次のネットワークポリシーを適用します。

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml
  10. ブラウザを更新します。フロントエンドがバックエンドと通信できることがわかります。

    
                        フロントエンドからバックエンドまでのポリシー
  11. クライアントからフロントエンドサービスへのトラフィックを許可するには、次のネットワークポリシーを適用します。

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
  12. ブラウザを更新します。クライアントがフロントエンドサービスと通信できることがわかります。フロントエンドサービスは、バックエンドサービスと引き続き通信できます。

    
                        最終ネットワークポリシー
  13. (オプション) デモが完了したら、そのリソースを削除することができます。

    kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml

    リソースを削除しても、ノード上に iptables ルールが残っていて、クラスター内のネットワークを予期しない方法で妨げる可能性があります。Calico を削除する唯一の確実な方法は、すべてのノードを終了してリサイクルすることです。すべてのノードを終了するには、Auto Scaling グループの必要数を 0 に設定してから目的数にバックアップするか、単にノードを終了します。ノードをリサイクルできない場合の最終的な手順については、Calico GitHub リポジトリの「Disabling and removing Calico Policy」を参照してください。

Calico の削除

Calico をインストールした方法を使用して Calico を削除します。

Helm

Calico をクラスターから削除します。

helm uninstall calico
Manifests

Calico をクラスターから削除します。

kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml