【问题标题】:Ingress with subdomains带有子域的入口
【发布时间】:2019-03-25 18:32:06
【问题描述】:

我使用 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 不同。

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

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

【问题讨论】:

  • 澄清一下,您似乎正在使用默认的 GCE LB。您是使用具有多个规则的单个 Ingress,还是为每个子域使用单独的 Ingress?
  • 我使用每个子域(每个命名空间)的 Ingress。
  • 好的,每个子域的入口不同,每个子域的 IP 不同?您是否有每个子域/入口资源的 A 记录?

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


【解决方案1】:

您希望 *.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?

这就是“它是如何工作的”。我不确定这是否是你的问题?很难诊断您遇到的问题。大概你有一个入口、一个服务和一个部署?为了帮助解决这个问题,我认为您需要发布这些内容并解释(作为更新或单独的问题)您看到的行为(可能是 404)?

【讨论】:

  • 我每个分支都有部署 + 服务 + 入口。每个入口都有相同的路径规则,但具有不同的主机,这取决于分支名称。我目前的情况,当我尝试打开子域时 - 我看到长时间加载。当 ping 主机 PING *** (***): 56 个数据字节 icmp_seq 请求超时 0 icmp_seq 请求超时 1 icmp_seq 请求超时 2 icmp_seq 请求超时 3
  • 我猜你使用的是 GCE 入口而不是 NGINX (mkubaczyk.com/2017/12/13/…)。他们的常见问题解答 (github.com/kubernetes/ingress-gce/blob/master/docs/faq/gce.md) 中有一些调试建议。我猜你正在做类似cloud.google.com/kubernetes-engine/docs/tutorials/… 我的印象是你的DNS 可能没有访问子域的IP 地址。尝试只使用一个没有通配符的分支来缩小问题范围。还要仔细检查 gcloud 控制台中的状态
  • 通过切换到另一个 ip 解决了问题。我使用区域 ip 进行入口,但它仅适用于全球 ip。我遇到了另一个问题,也许你知道我该如何解决它stackoverflow.com/questions/52934429/ingress-rules-not-works
【解决方案2】:

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

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

  1. 将您的 DNS 指向您的入口 IP 地址。为此,您需要设置一个全局静态 IP 地址。在谷歌云中你可以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 }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 2023-01-18
    • 2012-04-03
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2015-01-19
    相关资源
    最近更新 更多