Amazon VPC CNIの設定
まずはAmazon VPC CNIを設定していきましょう。私たちのVPCは、100.64.0.0/16範囲のセカンダリCIDRを追加して再構成されています:
~$aws ec2 describe-vpcs --vpc-ids $VPC_ID | jq '.Vpcs[0].CidrBlockAssociationSet'
[
{"AssociationId": "vpc-cidr-assoc-0ef3fae4a0abc4a42",
"CidrBlock": "10.42.0.0/16",
"CidrBlockState": {"State": "associated"
}
},
{"AssociationId": "vpc-cidr-assoc-0a6577e1404081aef",
"CidrBlock": "100.64.0.0/16",
"CidrBlockState": {"State": "associated"
}
}
]
これにより、デフォルトのCIDR範囲(上記の出力では10.42.0.0/16)に加えて使用できる別のCIDR範囲ができました。この新しいCIDR範囲から、Podの実行に使用する3つの新しいサブネットをVPCに追加しました:
~$echo "The secondary subnet in AZ $SUBNET_AZ_1 is $SECONDARY_SUBNET_1"
~$echo "The secondary subnet in AZ $SUBNET_AZ_2 is $SECONDARY_SUBNET_2"
~$echo "The secondary subnet in AZ $SUBNET_AZ_3 is $SECONDARY_SUBNET_3"
カスタムネットワーキングを有効にするには、aws-node DaemonSetのAWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG環境変数を_true_に設定する必要があります。
~$kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
次に、Podがデプロイされる各サブネット用のENIConfigカスタムリソースを作成します:
~/environment/eks-workshop/modules/networking/custom-networking/provision/eniconfigs.yaml
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
name: ${SUBNET_AZ_1}
spec:
securityGroups:
- ${EKS_CLUSTER_SECURITY_GROUP_ID}
subnet: ${SECONDARY_SUBNET_1}
---
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
name: ${SUBNET_AZ_2}
spec:
securityGroups:
- ${EKS_CLUSTER_SECURITY_GROUP_ID}
subnet: ${SECONDARY_SUBNET_2}
---
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
name: ${SUBNET_AZ_3}
spec:
securityGroups:
- ${EKS_CLUSTER_SECURITY_GROUP_ID}
subnet: ${SECONDARY_SUBNET_3}
これらをクラスターに適用しましょう:
~$kubectl kustomize ~/environment/eks-workshop/modules/networking/custom-networking/provision \
| envsubst | kubectl apply -f-
ENIConfigオブジェクトが作成されたことを確認します:
~$kubectl get ENIConfigs
最後に、aws-node DaemonSetを更新して、EKSクラスターで作成された新しいAmazon EC2ノードにアベイラビリティーゾーンのENIConfigを自動的に適用するようにします。
~$kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone