0x00 目标
接前篇: https://www.jianshu.com/p/3e5de636fee8
当我们有一个集群后,首先要做的就是安装一个 ingress controller,
这里采用官方推荐的 aws load balance contrller
参考: https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-alb-ingress-controller-fargate/
0x01 前置条件
.aws/config 默认区域选定us-west-2 (看自己实际情况进行选择
.kube/config 默认的 k8s集群为目标集群 ( 多集群情况下, 可能会串掉, 特别注意
0x02 安装过程
export CLUSTER=集群名称
export ACCOUNT=aws账号12位数字
export VPCID=vpc-xxxx
export REGION=us-west-2
# 安装集群访问控制策略
eksctl utils associate-iam-oidc-provider --cluster $CLUSTER --approve
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy.json
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
eksctl create iamserviceaccount \
--cluster=$CLUSTER \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::$ACCOUNT:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve
# 安装 controller
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
helm repo add eks https://aws.github.io/eks-charts
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
--set clusterName=$CLUSTER \
--set serviceAccount.create=false \
--set region=$REGION \
--set vpcId=$VPCID \
--set serviceAccount.name=aws-load-balancer-controller \
-n kube-system
0x03 确认
kubectl get po -A -o wide
# 看到下图状态, 表示安装成功
0x04 关于多端口Ingress
除了一般的 80, 443 端口对外提供服务以外, 我们还可能用到 nacos之类的 特殊端口,
应该如何处理呢?
重点是 下面两个参数:
alb.ingress.kubernetes.io/group.name: sit
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
不同的ingress yml, 只要配置相同的 group name, 和不同的 监听端口, 就可以实现上述功能.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-80
namespace: sit
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internal
alb.ingress.kubernetes.io/target-type: ip
# 指定 ALB Listener 的端口,默认为80
# 参考链接:https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#traffic-listening
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
# 指定IngressGroup。使用相同IngressGroup的Ingress会被合并到同一个ALB
# 参考链接:https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#ingressgroup
alb.ingress.kubernetes.io/group.name: sit
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: nginx
servicePort: 80
完~