我使用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,但无效。
请帮帮我。对不起,我的英语。
答案 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与子域一起工作。基本上,您只需要为每个主机定义规则。
您可以按照以下特定步骤操作
最终代码将如下所示,我正在使用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 }}