本实验会介绍如何将App Mesh的虚拟节点(vitual-nodes)注册为ALB Ingress Controller 的目标。

walkthrough/howto-k8s-alb文件夹,所有的命令都是在此文件夹下运行。export AWS_ACCOUNT_ID=<your_account_id>
export AWS_DEFAULT_REGION=cn-northwest-1
helm upgrade 去覆盖 sidecar.image.repository 和 sidecar.image.tag 字段。export VPC_ID=<vpc_id>
# 创建 AWS Load Balancer Controller 所需的 IAM 策略
curl -o iam-policy.json \
    https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.1/docs/install/iam_policy.json
sed "s/arn:aws:/arn:aws-cn:/g" iam-policy.json > iam-policy-cn.json
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam-policy-cn.json
# 创建 AWS Load Balancer Controller 所需的IAM角色
eksctl create iamserviceaccount \
    --cluster=appmeshtest \
    --namespace=kube-system \
    --name=aws-load-balancer-controller \
    --attach-policy-arn=arn:aws:iam::$AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
    --override-existing-serviceaccounts \
    --approve
如果是亚马逊云科技中国区域,使用:
eksctl create iamserviceaccount \
    --cluster=appmeshtest \
    --namespace=kube-system \
    --name=aws-load-balancer-controller \
    --attach-policy-arn=arn:aws-cn:iam::$AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
    --override-existing-serviceaccounts \
    --approve
# 安装 AWS Load Balancer Controller CRDS
kubectl apply -k \
    "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
# 安装 AWS Load Balancer Controller
helm install aws-load-balancer-controller \
    eks/aws-load-balancer-controller -n kube-system \
    --set clusterName=appmeshtest \
    --set serviceAccount.create=false \
    --set serviceAccount.name=aws-load-balancer-controller \
    --set vpcId=$VPC_ID \
    --set region=$AWS_DEFAULT_REGION \
    --set image.repository=961992271922.dkr.ecr.cn-northwest-1.amazonaws.com.cn/amazon/aws-load-balancer-controller
./deploy.sh
检查Ingress的事件,查看变化。
```
kubectl describe ing -n howto-k8s-alb color
```
您应该会看到类似于以下内容。
```
Name:             color
Namespace:        howto-k8s-alb
Address:          k8s-howtok8s-color-63786f35e6-804246232.cn-northwest-1.elb.amazonaws.com.cn
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host        Path  Backends
----        ----  --------
*
            /color   front:8080 (192.168.55.156:8080,192.168.58.190:8080,192.168.79.111:8080 + 2 more...)
Annotations:  alb.ingress.kubernetes.io/healthcheck-path: /color
            alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 10080}]
            alb.ingress.kubernetes.io/scheme: internet-facing
            alb.ingress.kubernetes.io/target-type: ip
            kubernetes.io/ingress.class: alb
Events:
Type    Reason                  Age    From     Message
----    ------                  ----   ----     -------
Normal  SuccessfullyReconciled  3m18s  ingress  Successfully reconciled
 ```
稍等几分钟后,检查是否可以通过ALB Ingress Controller访问该应用程序。
curl -v k8s-howtok8s-color-63786f35e6-804246232.cn-northwest-1.elb.amazonaws.com.cn:10080/color
您应该看到类似于以下内容。
*   Trying 34.208.158.34...
* TCP_NODELAY set
* Connected to k8s-howtok8s-color-63786f35e6-804246232.cn-northwest-1.elb.amazonaws.com.cn (34.208.158.34) port 80 (#0)
> GET /color HTTP/1.1> Host: k8s-howtok8s-color-63786f35e6-804246232.cn-northwest-1.elb.amazonaws.com.cn
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 09 May 2020 01:30:06 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< server: envoy
< x-envoy-upstream-service-time: 0
<
* Connection #0 to host 80113f18-howtok8salb-color-0f20-319733316.us-west-2.elb.amazonaws.com left intact
blue