部署应用

接下来创建AWS Load balancer controller,并部署一个service暴露EKS应用。

给subnet打tag

AWS Load balancer controller根据子网的标签来找到它,所以提前要给几个子网打上以下标签:

kubernetes.io/role/elb=1

image-20240319103646487

创建AWS Load balancer controller

eksctl utils associate-iam-oidc-provider --cluster ipv6-cluster --region $AWS_REGION --approve # 开启OIDC provider

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy2 \
--policy-document file://iam_policy.json   # 创建policy

eksctl create iamserviceaccount \
--cluster=ipv6-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole2 \
--region=$AWS_REGION \
--attach-policy-arn=arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy2 \
--approve

使用helm安装aws load balancer controller:

helm repo add eks https://aws.github.io/eks-charts

helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=ipv6-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set createIngressClassResource=true

查看aws-load-balancer-controller状态:

kubectl get pods -A -o wide

image-20240319102347647

部署应用

部署game 2048测试应用:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full_dualstack.yaml

上述命令将在双栈模式下配置ALB。ALB 将接受来自支持 IPv4 和 IPv6 的客户端的传入连接请求。当将注释service.beta.kubernetes.io/aws-load-balancer-ip-address-type: Dualstack添加后,EKS IPv6 集群会在双栈模式下配置 ALB 和 NLB :

image-20240319102729100

几分钟后,使用以下命令验证是否已创建alb:

kubectl get ingress/ingress-2048 -n game-2048

创建出来的ALB是dual stack模式,解析出来同时具有ipv6和ipv4 地址:

image-20240319103943187