进入子网域

时间:2018-10-21 14:49:40

标签: google-app-engine kubernetes google-kubernetes-engine kubernetes-ingress

我使用Google Cloud部署公司应用。

目标:部署在某个子域(example.com)上的每个分支:task-123.example.com等。

我将Cloud DNS名称空间复制到域注册商。我将静态IP地址(通过kubernetes.io/ingress.global-static-ip-name: "test-static-ip")传递给Ingress,并将其传递给域注册商的A记录。但是我不明白如何使子域有效。

每个分支都使用静态IP创建Ingress,但是为主机使用不同的URL。

我制作了CNAME * .example.com,它引用了example.com,但无效。

请帮帮我。对不起,我的英语。

2 个答案:

答案 0 :(得分:2)

您希望* .example.com指向入口控制器,以便branch1.example.com和branch2.example.com都将进入入口控制器。这是通过通配符DNS实现的。

方案中的每个分支都应具有自己的路由规则(入口资源),并为其特定分支定义一个主机部分。创建新的入口资源时,入口控制器将进行更新,并且其路由规则将反映其他规则。因此,使用该主机的新入口资源创建一个新分支将告诉入口控制器将该特定主机的流量路由到该分支特定的服务。 (或者您也可以通过扇出入口一口气定义所有分支规则-参见ingress-nginx - create one ingress per host? Or combine many hosts into one ingress and reload?

这就是“运作方式”。我不确定这是否是您的问题?很难诊断您遇到的问题。大概您有一个Ingress,一个Service和一个Deployment?为了解决这个问题,我认为您需要发布这些内容并说明(作为更新或单独的问题)您看到的行为(可能是404)?

答案 1 :(得分:0)

使用kubernetes可以非常轻松地使Ingress与子域一起工作。基本上,您只需要为每个主机定义规则。

您可以按照以下特定步骤操作

  1. 将您的DNS指向您的入口IP地址。 为此,您需要设置全局静态IP地址。在Google云中,您可以go here并查看如何进行设置

  2. 在您的入口注释中引用静态IP

  3. 定义规则和主机映射,here是该文档

最终代码将如下所示,我正在使用Helm在这里迭代我的主机

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-router
      annotations:
        kubernetes.io/ingress.global-static-ip-name: "your-static-domain"
        networking.gke.io/managed-certificates: "your-tls-cert"
    spec:
      rules:
    {{- range $index,$service := .Values.deployments }}
        - host: {{ $service.host }}
          http:
            paths:
              - backend:
                  serviceName: {{ $service.name }}-service-name
                  servicePort: {{ $service.port }}
    {{- end }}