Amazon EKS Connector
Amazon EKS Connectorは、EKS外の既存のKubernetesクラスターをAmazon EKSコンソールで表示することができる機能です。操作ができるわけではありません。これで何がうれしいかは難しいところですが、複数のKubernetesクラスターを一見一元管理できているように見えるので、マルチクラウド環境でクラスタが乱立した際に、マネージメント向けの印象は良くなるかもしれません。
目的
今回はIBM CloudのRed Hat OpenShift on IBM Cloud(ROKS)をEKS ConnectorでEKSコンソールに表示してみます。
なお、2021年9月時点のEKS ConnectorはまだPreviewリリースのため、GA後の仕様は変更される可能性があります。
手順
公式ガイドはこちらです。
IAMポリシーの追加(AWS)
下記ファイルを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SSMAccess",
"Effect": "Allow",
"Principal": {
"Service": [
"ssm.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
{
"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 create-role --role-name AmazonEKSConnectorAgentRole --assume-role-policy-document file://eks-connector-agent-trust-policy.json
$ aws iam put-role-policy --role-name AmazonEKSConnectorAgentRole --policy-name AmazonEKSConnectorAgentPolicy --policy-document file://eks-connector-agent-policy.json
クラスタの登録(AWS)
今回はCLIを使います。
$ aws eks register-cluster --name roks-public-tok --connector-config roleArn=arn:aws:iam::************:role/AmazonEKSConnectorAgentRole,provider="OPENSHIFT"
EKSコンソールを確認します。一覧にクラスターが表示され、ステータスが保留中となります。
クラスターを選択するとマニフェストファイルがダウンロードできます。この操作は1回しかできませんので、必ずダウンロードしてください。
ServiceAccountの変更(IBM Cloud)
ガイドには記載がなく、OpenShift固有の手順です。EKS ConnectorのPod内にrootユーザーで実行されるコンテナがあるため、rootで実行可能なようにServiceAccountにSCCを設定します。
$ oc create ns eks-connector
namespace/eks-connector created
$ oc create sa eks-connector -n eks-connector
serviceaccount/eks-connector created
$ oc adm policy add-scc-to-user anyuid -z eks-connector -n eks-connector
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:anyuid added: "eks-connector"
EKS Connectorのデプロイ(IBM Cloud)
先ほどダウンロードしたマニフェストファイルを登録します。
$ oc apply -f roks-public-tok.yaml
Warning: oc apply should be used on resource created by either oc create --save-config or oc apply
namespace/eks-connector configured
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
EKSコンソールで確認します。この段階ではエラーになりますが、ステータスがアクティブになります。
ClusterRoleの設定(IBM Cloud)
テンプレートをダウンロードします。
$ curl -o eks-connector-clusterrole.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector-console-roles/eks-connector-clusterrole.yaml
最下部の%IAM_ARN%を自ユーザーのARNに書き換えます。
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: eks-connector-service
subjects:
- kind: ServiceAccount
name: eks-connector
namespace: eks-connector
roleRef:
kind: ClusterRole
name: eks-connector-service
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: eks-connector-service
rules:
- apiGroups: [ "" ]
resources:
- users
verbs:
- impersonate
resourceNames:
# TODO: 1. ADD your IAM identity arn here
# - "%IAM_ARN%"
- arn:aws:iam::************:user/teru
ClusterRoleを追加します。
$ oc apply -f eks-connector-clusterrole.yaml
clusterrolebinding.rbac.authorization.k8s.io/eks-connector-service created
clusterrole.rbac.authorization.k8s.io/eks-connector-service created
続いてもう1つテンプレートをダウンロードします。
$ curl -o eks-connector-console-dashboard-full-access-group.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector-console-roles/eks-connector-console-dashboard-full-access-group.yaml
こちらも同様に%IAM_ARN%を変更します。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: eks-connector-console-dashboard-full-access-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- pods
- events
verbs:
- get
- list
- apiGroups:
- apps
resources:
- deployments
- daemonsets
- statefulsets
- replicasets
verbs:
- get
- list
- apiGroups:
- batch
resources:
- jobs
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: eks-connector-console-dashboard-full-access-clusterrole-binding
subjects:
- kind: User
# name: "%IAM_ARN%"
name: arn:aws:iam::************:user/teru
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: eks-connector-console-dashboard-full-access-clusterrole
apiGroup: rbac.authorization.k8s.io
---
ClusterRoleを登録します。
$ oc apply -f eks-connector-console-dashboard-full-access-group.yaml
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コンソールの確認(AWS)
画面をリロードするとROKSの状態が確認できるようになります。
まとめ
基本は公式ガイド通りですが、ROKS(OpenShift)固有でSCC設定が追加で必要となります。