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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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

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

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

  • Calico は、Calico の外部iptablesですでに実装されている既存のルールよりも優先度の高い可能性のあるルールをノードの に追加します。Calico ポリシーに既存のiptablesルールを追加して、Calico によってオーバーライドされた Calico ポリシーの外部にあるルールを避けることを検討してください。

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

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

  1. クラスターがあるリージョンに対応するオプションを入力して、Calico マニフェストをクラスターに適用します。

    • 中国 (寧夏) または 以外のすべてのリージョン 中国 (北京)– GitHub プロジェクトから Calico マニフェストaws/amazon-vpc-cni-k8sを適用します。これらのマニフェストはcalico-system、 名前空間に DaemonSets を作成します。

      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
    • 中国 (寧夏) 、、または 中国 (北京)

      1. 次のコマンドを使用して Calico マニフェストをダウンロードします。

        curl -o calico-operator.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml curl -o calico-crs.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml
      2. マニフェストを変更します。

        1. ダウンロードしたマニフェストファイルを表示し、イメージの名前をメモします。次のコマンドを使用して、イメージをローカルにダウンロードします。

          docker pull quay.io/tigera/operator:v1.13.2 docker pull quay.io/calico/node:v3.17.1 docker pull quay.io/calico/typha:v3.17.1
        2. 次のコマンドを使用して、中国の Amazon Elastic Container Registry リポジトリにプッシュするイメージにタグを付けます。

          docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
        3. 次のコマンドを使用して、イメージを中国Amazon ECRリポジトリにプッシュします。

          docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
        4. リージョンでcalico-operator.yamlイメージ URL を参照するように Amazon ECR ファイルを更新します。

        5. 仕様に以下を追加して、 calico-crs.yaml ファイルを更新して リージョンのイメージAmazon ECRリポジトリを参照します。

          registry: <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com.cn
      3. Calico マニフェストを適用します。これらのマニフェストはcalico-system、 名前空間に DaemonSets を作成します。

        kubectl apply -f calico-operator.yaml kubectl apply -f calico-crs.yaml
  2. calico-system デーモンセットを監視して、calico-node デーモンセットのポッドが DESIRED 状態で READY 数になるまで待機します。この場合、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」を参照してください。