本实验展示如何使用 EKS 和 App Mesh 管理HTTP/2路由。
$ kubectl get deployment -n appmesh-system appmesh-controller -o json | jq -r ".spec.template.spec.containers[].image" | cut -f2 -d ':'|tail -n1
你可以使用 v1beta1 示例 manifest,如果你 aws-app-mesh-controller-for-k8s 版本是 v0.3.0
克隆仓库
,然后进入howto-k8s-http2
文件夹,所有的命令都是在此文件夹下运行。
你的 account id:
export AWS_ACCOUNT_ID=<your_account_id>
Region e.g. us-west-2
export AWS_DEFAULT_REGION=us-west-2
VPC_ID 环境变量设置为启动 Kubernetes pod 的 VPC。
要查找 EKS 集群的 VPC,您可以使用 aws eks describe-cluster
。
aws eks describe-cluster --name appmeshtest | grep vpc # 根据集群名称获取vpcId
export VPC_ID=...
(可选项) 指定 Envoy Image 版本 如果要使用与默认版本
不同的Envoy 容器镜像,运行 helm upgrade
去覆盖 sidecar.image.repository
和 sidecar.image.tag
字段。
helm upgrade -i appmesh-controller eks/appmesh-controller --namespace appmesh-system --set sidecar.image.repository=840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy --set sidecar.image.tag=<VERSION>
部署
./deploy.sh
请注意,示例应用程序使用go模块。如果在部署期间无法访问Go Proxy
,则可以通过设置GO_PROXY = direct
覆盖GOPROXY。
GO_PROXY=direct
./deploy.sh
设置端口转发(port forwarding) 以将请求从本地路由到 client 容器。 本地端口由您决定,但本实验将假定本地端口为7000。
kubectl -n howto-k8s-http2 port-forward deployment/client 7000:8080
为了查看应用程序日志,您必须通过运行以下命令找到您的 client Pod:
kubectl get pod -n howto-k8s-http2
使用client Pod的名称,运行以下命令以查看client应用程序日志:
kubectl logs -f -n howto-k8s-http2 <pod_name> app
请求会通过HTTP/2均匀分布到3种color服务(red, blue, and green)。可以通过多次运行以下命令来证明这一点:
curl localhost:7000/color
您可以在此处here 编辑这些配置。进行任何更改后,运行./deploy.sh。例如,您可以删除一个权重目标并再次触发上面的curl命令,可以看到不再显示这个颜色的返回。
apiVersion: appmesh.k8s.aws/v1beta2
kind: VirtualRouter
metadata:
namespace: ${APP_NAMESPACE}
name: color
spec:
listeners:
- portMapping:
port: 8080
protocol: http2
routes:
- name: color-route
http2Route:
match:
prefix: /
action:
weightedTargets:
- virtualNodeRef:
name: red
weight: 1 # 可以调整这个权重
- virtualNodeRef:
name: blue
weight: 1
- virtualNodeRef:
name: green
weight: 1