进入子域

Ingress with subdomains

我使用 Google 云来部署公司应用程序。

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

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

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

我创建了 CNAME *.example.com 来引用 example.com,但它不起作用。

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

您希望 *.example.com 指向入口控制器,因此 branch1.example.com 和 branch2.example.com 都会命中入口控制器。这是通过通配符 DNS 实现的。

场景中的每个分支都应该有自己的路由规则(入口资源),并为其特定分支定义主机部分。当创建新的入口资源时,入口控制器会更新,然后其路由规则会反映附加规则。因此,为该主机创建一个具有新入口资源的新分支将告诉入口控制器将该特定主机的流量路由到特定于该分支的服务。 (或者您可以使用扇出入口一次性定义所有分支规则 - 请参阅

那是 'how it works'。我不确定这是不是你的问题?很难诊断您遇到的问题。假设您有一个 Ingress、一个 Service 和一个 Deployment?为了解决这个问题,我认为您需要 post 那些并解释(作为更新或单独的问题)您看到了什么行为(可能是 404)?

使用 kubernetes 让 Ingress 与子域一起工作变得非常容易。基本上,您只需为每个主机定义规则。

以下是您可以遵循的具体步骤

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

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

  3. 定义规则和主机映射,参考documentation

最终代码如下所示,我在这里使用 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 }}