如何使用 GKE 启用子域

Luc*_*cci 4 subdomain kubernetes google-kubernetes-engine

我在 GKE 中有不同的 Kubernetes 部署,我想从不同的外部子域访问它们。

我尝试创建两个具有子域“sub1”和“sub2”以及主机名“app”的部署,另一个具有主机名“app”的部署以及一个将其公开在应用程序 DNS 上配置的 IP XXX.XXX.XXX.XXX 上的服务。 mydomain.com

我想从 sub1.app.mydomain.com 和 sub2.app.mydomain.com 访问 2 个子部署

这应该是自动的,添加新的部署我不能每次都更改 DNS 记录。也许我以错误的方式处理这个问题,我是 GKE 的新手,有什么建议吗?

api版本:扩展/v1beta1
种类:部署
元数据:
  名称:我的主机
规格:
  副本:1
  战略: {}
  模板:
    元数据:
      创建时间戳:空
      标签:
        名称:我的主机
        类型:代理
    规格:
      主机名:应用程序
      容器:
        - 图片:nginx:alpine
          名称:nginx
          端口:
            -名称:nginx
              集装箱端口:80
              主机端口:80
      重启策略:始终
地位: {}
---
api版本:扩展/v1beta1
种类:部署
元数据:
  名称: my-subdomain-1
规格:
  副本:1
  战略: {}
  模板:
    元数据:
      创建时间戳:空
      标签:
        名称: my-subdomain-1
        类型:应用程序
    规格:
      主机名:应用程序
      子域:sub1
      容器:
        - 图片:nginx:alpine
          名称:nginx
          端口:
            -名称:nginx
              集装箱端口:80
              主机端口:80
      重启策略:始终
地位: {}
---
api版本:扩展/v1beta1
种类:部署
元数据:
  名称:我的子域2
规格:
  副本:1
  战略: {}
  模板:
    元数据:
      创建时间戳:空
      标签:
        名称:我的子域2
        类型:应用程序
    规格:
      主机名:应用程序
      子域:sub2
      容器:
        - 图片:nginx:alpine
          名称:nginx
          端口:
            -名称:nginx
              集装箱端口:80
              主机端口:80
      重启策略:始终
地位: {}
---
api版本:v1
种类: 服务
元数据:
  名称: my-expose-dns
规格:
  端口:
    - 端口:80
  选择器:
    名称:我的主机
  类型:负载均衡器

fra*_*nkd 5

你想要Ingress。有多种可用选项(Istio、nginx、traefik 等)。我喜欢使用 nginx,它非常易于安装和使用。安装步骤可以在kubernetes.github.io找到。

安装 Ingress Controller 后,您需要确保已使用 type=LoadBalancer 的服务公开它。接下来,如果您使用的是 Google Cloud DNS,请为您的域设置通配符条目,其中 A 记录指向 Ingress Controller 服务的外部 IP 地址。在您的情况下,它将是 *.app.mydomain.com。

现在,您到 app.mydomain.com 的所有流量都将进入该负载均衡器并由 Ingress Controller 处理,因此现在您需要为您想要的任何服务添加服务和 Ingress 实体。

apiVersion: v1
kind: Service
metadata:
  name: my-service1
spec:
  selector:
    app: my-app-1
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: my-service2
spec:
  selector:
    app: my-app2
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: sub1.app.mydomain.com
    http:
      paths:
      - backend:
          serviceName: my-service1
          servicePort: 80
  - host: sub2.app.mydomain.com
    http:
      paths:
      - backend:
          serviceName: my-service2
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)

显示的路由是基于主机的,但您可以轻松地像基于路径一样处理这些服务,因此到 app.mydomain.com/service1 的所有流量都将转到您的部署之一。