建立支持 IPv6 的 權限給 EKS

了解叢集、Pod 和 服務的 IPv6 地址

EKS 中的配置 Cluster IP address family 選擇 IPv6 時,需要設定 Amazon VPC CNI 外掛程式以使用 IRSA

環境定義:

參數說明參數內容
eks cluster 名稱development-souffle
policy 名稱development-souffle-VPCCNIIPv6
role 名稱development-souffle-VPCCNIIPv6

從 EKS 中取得 OIDC URL

透過 aws cli 命令取得 EKS 中的 OIDC URL。

1aws eks describe-cluster --name development-souffle --query "cluster.identity.oidc.issuer" --output text

回傳的結果如下。

1https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE

建立 IAM policy 並定義可以使用的權限

因為 AWS 維護的 AmazonEKS_CNI_Policy 權限不足沒辦法分配 IPv6 地址,所以需要建立新 policy,下面為配置定義。

 1{
 2  "Version": "2012-10-17",
 3  "Statement": [
 4    {
 5      "Effect": "Allow",
 6      "Action": [
 7        "ec2:AssignIpv6Addresses",
 8        "ec2:DescribeInstances",
 9        "ec2:DescribeTags",
10        "ec2:DescribeNetworkInterfaces",
11        "ec2:DescribeInstanceTypes"
12      ],
13      "Resource": "*"
14    },
15    {
16      "Effect": "Allow",
17      "Action": [
18        "ec2:CreateTags"
19      ],
20      "Resource": [
21        "arn:aws:ec2:*:*:network-interface/*"
22      ]
23    }
24  ]
25}

建立 VPC CNI role 並定義 trust relationships

要配置 IRSA(IAM role for service account) 讓 pod kube-system:aws-node 可以提權,所以需要定義 trust relationships,下面 json 是 Trusted entities 的定義,其中:

  • Effect 固定 Allow
  • Federated 為 OIDC 的 arn,可以去 IAM > Identity providers 底下找
  • Action 固定 "sts:AssumeRoleWithWebIdentity"
  • StringEquals
    1. aud (Audience) 為 sts.amazonaws.com 可以使用 Token 授權
    2. sub (Subject) 為 system:serviceaccount:kube-system:aws-node 可以提權
 1{
 2  "Version": "2012-10-17",
 3  "Statement": [
 4    {
 5      "Effect": "Allow",
 6      "Principal": {
 7        "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
 8      },
 9      "Action": "sts:AssumeRoleWithWebIdentity",
10      "Condition": {
11        "StringEquals": {
12          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
13          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node"
14        }
15      }
16    }
17  ]
18}

將 policy 權限加入到 role 中

1aws iam attach-role-policy \
2  --policy-arn arn:aws:iam::111122223333:policy/development-souffle-VPCCNIIPv6 \
3  --role-name development-souffle-VPCCNIIPv6

加入 ann 到 serviceaccount aws-node 中,使其角色可以提權

1kubectl get serviceaccount -n kube-system aws-node -o yaml
2
3kubectl annotate serviceaccount \
4    -n kube-system aws-node \
5    eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/development-souffle-VPCCNIIPv6

重新部署 aws-node 所有 pod 使其可以使用到新的 service account 權限

comments powered by Disqus