この記事は公開されてから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のマネコンからまとめて確認できて面白かったです。