首页 > 解决方案 > 如何将外部流量映射到 GCP Traffic Director 上的内部服务网格?

问题描述

我已经使用Traffic Director setup with automatic Envoy injection tutorial建立了一个简单的 GKE 集群,该集群连接到 GCP Traffic Director 。

下一步是如何将外部流量映射到仅内部的 Traffic Director 后端服务?

基本上,我的目标是拥有一个带有 IP 地址的外部负载均衡器,该地址接收外部流量并将其路由到 Traffic Director 服务网格,以在不同的网络端点组之间分割流量。

我尝试了以下方法:

  1. 在网络服务-> 负载平衡--> 中手动创建一个外部负载平衡器,但是后端列表不包括 Traffic Director 后端服务,因此我无法创建一个具有外部 IP 并将其重定向到内部服务网格的服务。

缺少后端服务

  1. 安装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?

标签: google-cloud-platformkubernetes-ingressistioenvoyproxygcp-load-balancer

解决方案


Traffic Director 不是指向路由的端点。它是服务网格的“控制平面”。

因此,您将从 GCP 配置您的路由规则,而 Traffic Director 将按预期配置您的 sidecar。但最终您的负载均衡器应该指向实例组或网络端点组,而不是 Traffic Director。

编辑

Traffic Director 不是被配置的,而是被配置的。它配置 Envoy 边车。这些是 L7 代理,因此 URL 映射发生在代理上。

Endpoint Group 将是一组 pod 的 IP 地址。由于集群的 pod 范围已添加到子网中;作为 IP 别名,VPC 能够从该范围内提取任何 IP 地址,对其进行分组,并为 GCP 上的 HTTP 负载均衡器创建后端。

基本上,Traffic Director 是 Istio,但控制平面与 GCP 解耦。


推荐阅读