Amazon EKS に Calico をインストールする - Amazon EKS

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

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

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

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

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

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

  1. aws/amazon-vpc-cni-k8sGitHub プロジェクト」から 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 デーモンセットを監視して、calico-node デーモンセットのポッドが READY 状態で DESIRED 数になるまで待機します。この場合、Calico は動作しています。

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

    出力:

    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE calico-node 3 3 3 3 3 <none> 38s

Calico を Amazon EKS クラスターから削除するには

Amazon EKS クラスターで 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

Stars Policy デモ

このセクションでは、Project Calico ドキュメントに用意されている「Stars Policy デモ」について説明していきます。このデモでは、Amazon EKS クラスターにフロントエンド、バックエンド、およびクライアントサービスを作成します。また、このデモでは、各サービス間で利用可能な入力および出力のパスを示す管理 GUI が作成されます。

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

Stars Policy デモを実行するには

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

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
  2. すべてのポッドが Running ステータスになるまで待機します。

    kubectl get pods --all-namespaces --watch
  3. 管理 UI に接続するには、ローカルポート 9001 をクラスター上で実行されている management-ui サービスに転送します。

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

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

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

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

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

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

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml
  10. client 名前空間からフロントエンドサービスへのトラフィックを許可するには、次のネットワークポリシーを適用します。

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
    
                        最終ネットワークポリシー
  11. (オプション) デモが完了したら、以下のコマンドを使用してリソースを削除することができます。

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

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