我已经使用Traffic Director setup with automatic Envoy injection tutorial建立了一个简单的 GKE 集群,该集群连接到 GCP Traffic Director 。
下一步是如何将外部流量映射到仅内部的 Traffic Director 后端服务?
基本上,我的目标是拥有一个带有 IP 地址的外部负载均衡器,该地址接收外部流量并将其路由到 Traffic Director 服务网格,以在不同的网络端点组之间分割流量。
我尝试了以下方法:
- 在网络服务-> 负载平衡--> 中手动创建一个外部负载平衡器,但是后端列表不包括 Traffic Director 后端服务,因此我无法创建一个具有外部 IP 并将其重定向到内部服务网格的服务。
- 安装NGINX 入口控制器图表并通过
.yaml
映射到 k8s 集群服务的入口控制器安装入口控制器 -->这将创建一个外部负载均衡器,但它只是直接进入服务而不是通过 Traffic Director
入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-nginx-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "60"
nginx.ingress.kubernetes.io/proxy-send-timeout: "60"
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
nginx.ingress.kubernetes.io/send-timeout: "60"
nginx.ingress.kubernetes.io/proxy-body-size: 1M
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: my-host-name.hostname.com
http:
paths:
- path: "/"
backend:
serviceName: service-test
servicePort: 80
服务:
apiVersion: v1
kind: Service
metadata:
name: service-test
annotations:
cloud.google.com/neg: '{"exposed_ports":{"80":{"name": "service-test-neg"}}}'
spec:
ports:
- port: 80
name: service-test
protocol: TCP
targetPort: 8000
selector:
run: app1
type: ClusterIP
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: app1
name: app1
spec:
replicas: 1
selector:
matchLabels:
run: app1
template:
metadata:
labels:
run: app1
spec:
containers:
- image: gcr.io/kubernetes-e2e-test-images/serve-hostname-amd64:1.1
name: app1
command:
- /bin/sh
- -c
- /serve_hostname -http=true -udp=false -port=8000
ports:
- protocol: TCP
containerPort: 8000
上面的部署和服务直接取自教程。
官方文档中似乎有一个使用网格边缘的二级网关处理入口流量的概念,但它只是概念性的,并没有提供实际操作的方法。
如何使用外部负载均衡器将外部流量映射到 GCP Traffic Director 管理的服务网格中,以便将高级流量配置到 GKE?