【祝GA】EKS ConnectorでGKE上のKubernetesクラスターをEKSのコンソールに表示してみた

GKE上のKubernetesクラスターもEKSのマネコンから確認できるよ!
2021.11.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

MAD事業部@大阪の岩田です。以前からプレビューリリースされていたEKS Connectorが先日ついにGAされました。

ということで記念にEKS Connectorを使ってGKE上のKubernetesクラスターをEKSのマネコンに表示してみました

やってみる

ということで早速やっていきます。KubernetesクラスターをEKSに登録する選択肢としてAWS CLIやマネコンからの操作が挙げられますが、今回はeksctlを使ってみます。eksctlは現時点での最新版0.74.0を利用しています。

$ eksctl version
0.74.0

ドキュメントの記述だとeksctl0.68以上のバージョンであれば良さそうなのですが、プレビューリリース~GAまでに発生した変更を考慮すると最新版にバージョンを上げておくのが無難だと思います。

GKEでクラスターを作成

まずはEKS Connectorを使って登録するためのKubernetesクラスターをGKE上に作成します。特に変わったことはせずデフォルト設定のままサクっと作成してしまいましょう。

EKS connectorエージェント用IAMロールの作成

続いて以下ドキュメントの手順に従い、EKS Connectorを利用するために必要なIAMロールを作成します。

https://docs.aws.amazon.com/eks/latest/userguide/connector_IAM_role.html

まずはeks-connector-agent-trust-policy.jsonというファイル名で以下のJSONファイルを用意し

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SSMAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ssm.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

JSONファイルを元にIAMロールを作成します

$aws iam create-role \
     --role-name AmazonEKSConnectorAgentRole \
     --assume-role-policy-document file://eks-connector-agent-trust-policy.json

続いてeks-connector-agent-policy.jsonというファイル名で以下のJSONファイルを用意し

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SsmControlChannel",
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel"
            ],
            "Resource": "arn:aws:eks:*:*:cluster/*"
        },
        {
            "Sid": "ssmDataplaneOperations",
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenDataChannel",
                "ssmmessages:OpenControlChannel"
            ],
            "Resource": "*"
        }
    ]
}

先程作成したIAMロールにポリシーを設定します

$aws iam put-role-policy \
     --role-name AmazonEKSConnectorAgentRole \
     --policy-name AmazonEKSConnectorAgentPolicy \
     --policy-document file://eks-connector-agent-policy.json

これでGKEのクラスターを登録する準備ができました。

GKEのクラスターをEKSに登録

続いてeksctlでGKEのクラスターをEKSに登録します。

$ eksctl register cluster --name gke-cluster --provider GKE
2021-11-23 21:08:16 [ℹ]  creating IAM role "eksctl-20211123210816248554"
2021-11-23 21:08:30 [ℹ]  registered cluster "gke-cluster" successfully
2021-11-23 21:08:30 [ℹ]  wrote file eks-connector.yaml to /Users/iwata.tomoya/Documents/xxxxx
2021-11-23 21:08:30 [ℹ]  wrote file eks-connector-clusterrole.yaml to /Users/iwata.tomoya/Documents/xxxxx
2021-11-23 21:08:30 [ℹ]  wrote file eks-connector-console-dashboard-full-access-group.yaml /Users/iwata.tomoya/Documents/xxxxx
2021-11-23 21:08:30 [!]  note: "eks-connector-clusterrole.yaml" and "eks-connector-console-dashboard-full-access-group.yaml" give full EKS Console access to IAM identity "arn:aws:iam::123456789012:user/hogehoge", edit if required; read https://docs.aws.amazon.com/eks/latest/userguide/connector-grant-access.html for more info
2021-11-23 21:08:30 [ℹ]  run `kubectl apply -f eks-connector.yaml,eks-connector-clusterrole.yaml,eks-connector-console-dashboard-full-access-group.yaml` before 26 Nov 21 12:08 UTC to connect the cluster

コマンドが完了すると

  • eks-connector.yaml
  • eks-connector-clusterrole.yaml
  • eks-connector-console-dashboard-full-access-group.yaml

3つのYAMLファイルが生成されます

この段階でEKSのコンソールを確認すると先程登録したGKEのクラスタが「保留中」状態で表示されていることが分かります

最後に出力されたメッセージに従ってGKE環境でkubectl applyを順番に叩いていきます。

まずはGKEに構築したクラスタのクレデンシャル情報を取得

$ gcloud container clusters get-credentials <GKE上に作成したクラスタの名前> --region=asia-northeast1-a
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-for-eks.

kubectlコマンドが叩けることを確認しておきましょう

$ kubectl get nodes
NAME                                             STATUS   ROLES    AGE   VERSION
gke-cluster-for-eks-default-pool-0f0324c4-78b6   Ready    <none>   20m   v1.21.5-gke.1302
gke-cluster-for-eks-default-pool-0f0324c4-cvxg   Ready    <none>   20m   v1.21.5-gke.1302
gke-cluster-for-eks-default-pool-0f0324c4-t8b5   Ready    <none>   20m   v1.21.5-gke.1302

後はまとめてkubectl applyを実行します

$ kubectl apply -f eks-connector.yaml,eks-connector-clusterrole.yaml,eks-connector-console-dashboard-full-access-group.yaml

namespace/eks-connector created
secret/eks-connector-activation-config created
role.rbac.authorization.k8s.io/eks-connector-secret-access created
serviceaccount/eks-connector created
secret/eks-connector-token created
rolebinding.rbac.authorization.k8s.io/eks-connector-secret-access created
configmap/eks-connector-agent created
statefulset.apps/eks-connector created
clusterrolebinding.rbac.authorization.k8s.io/eks-connector-service created
clusterrole.rbac.authorization.k8s.io/eks-connector-service created
clusterrole.rbac.authorization.k8s.io/eks-connector-console-dashboard-full-access-clusterrole created
clusterrolebinding.rbac.authorization.k8s.io/eks-connector-console-dashboard-full-access-clusterrole-binding created

登録が終わるとEKSのマネコンから色々な情報が見れるようになります

まとめ

大規模な環境出ない限りはEKS Connectorを使う機会は無いと思いますが、せっかくの機会なので試してみました。色んな環境にデプロイされたKubernetes環境がEKSのマネコンからまとめて確認できて面白かったです。

参考