Ambassador Edge Stack(AES)是一个基于Envoy Proxy实现的高性能的Ingress Controller和API网关。 AES通过Custom
Resource Definitions(CRD)使用Envoy提供的功能,集成了速率限制、身份认证、负载均衡和可观测性等功能。本文介绍如何通过Ambassador
Edge Stack(AES)暴露部署在ACK集群中的应用API。
步骤一:部署AES
- 执行以下命令部署AES。
kubectl apply -f https://www.getambassador.io/yaml/aes-crds.yaml
kubectl wait --for condition=established --timeout=90s crd -lproduct=aes
kubectl apply -f https://www.getambassador.io/yaml/aes.yaml
kubectl -n ambassador wait --for condition=available --timeout=90s deploy -lproduct=aes
- 执行以下命令确认AES部署成功。
kubectl get pod -n ambassador
预期输出:
NAME READY STATUS RESTARTS AGE
ambassador-566d496b77-tg6ng 1/1 Running 0 2m
ambassador-redis-5fbd59f4fb-88gm8 1/1 Running 0 2m
部署Ambassador的Pod显示Running,表示AES部署成功。
步骤二:暴露应用API
- 使用以下YAML示例创建一个测试应用及对应的Service。
cat <<-EOF | kubectl apply -f -
---
apiVersion: v1
kind: Service
metadata:
name: quote
namespace: ambassador
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app: quote
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: quote
namespace: ambassador
spec:
replicas: 1
selector:
matchLabels:
app: quote
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: quote
spec:
containers:
- name: backend
image: docker.io/datawire/quote:0.4.1
ports:
- name: http
containerPort: 8080
EOF
- 确认应用及对应的Service创建成功。
- 确认应用部署成功。
kubectl get pod -n ambassador -l app=quote
预期输出:
NAME READY STATUS RESTARTS AGE
quote-d57b799b4-j**** 1/1 Running 0 6m29s
部署应用的Pod显示running,表示应用部署成功。
- 确认服务部署成功。
kubectl get svc -n ambassador quote
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
quote ClusterIP 172.23.XX.XX <none> 80/TCP 5m45s
返回结果中显示服务名称,表示服务部署成功。
- 创建Mapping CRD,暴露应用API。
cat <<-EOF | kubectl apply -f -
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
name: backend
namespace: ambassador
spec:
prefix: /backend/
service: quote
EOF
- 确认Mapping CRD资源创建成功。
kubectl get mappings -n ambassador
预期输出:
NAME PREFIX SERVICE STATE REASON
ambassador-devportal /docs/ 12*.*.*.*:8500
ambassador-devportal-api /openapi/ 12*.*.*.*:8500
quote-backend /backend/ quote
返回结果中显示Mapping CRD资源,表示Mapping CRD资源部署成功。
- 获取AES服务的IP地址。
kubectl get -n ambassador service ambassador -o "go-template={{range .status.loadBalancer.ingress}}{{or .ip .hostname}}{{end}}"
预期输出:
47.94.XX.XX
- 访问暴露的应用API。
curl -k https://{{IP}}/backend/
{
"server": "frosty-kiwi-ewe7vk96",
"quote": "A principal idea is omnipresent, much like candy.",
"time": "2020-08-01T08:41:37.054259819Z"
}
请将${IP}
替换为步骤5获取的AES服务IP地址。