google-compute-engine - 设置多个入口、服务、部署资源和 Cloud DNS

标签 google-compute-engine kubernetes google-kubernetes-engine

我正在尝试弄清楚如何创建共享 IP 的多个入口资源。 或者,如果不可能,我想知道是否有某种转发 我可以将规则与 Cloud DNS 条目结合使用,以确保所有流量 到一个 IP(我可以将其设置为静态)转到一个 kubernetes 集群。

本质上,我想为每个包含一个或多个服务的服务设置一个入口 更多子域和所有这些入口都指向同一个集群。现在 每次进入时我都会获得不同的临时 IP。我可以创建一些转发吗 将所有流量指向静态 IP 的规则进入集群,然后也许 创建一个通配符 DNS 条目将所有子域指向静态 IP?

这是一个与我正在使用的配置类似的示例配置:

apiVersion: v1
kind: Service
metadata:
  name: api-service
  labels:
    name: api-service
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 3000
      protocol: TCP
  selector:
    name: api-deployment
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: api-deployment
  labels:
    name: api-deployment
spec:
  template:
    metadata:
      labels:
        name: api
    spec:
      containers:
        - image: us.gcr.io/[project]/hello-world:1.0.0
          name: api
          ports:
            - containerPort: 3000
          env:
            - name: NAME
              value: api
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-ingress
spec:
  backend:
    serviceName: api-service
    servicePort: 80
  rules:
  - host: api.example.com
    http:
      paths:
      - backend:
          serviceName: api-service
          servicePort: 80

我在 kube 集群上创建这些资源,如下所示:

$ kubectl create -f api.yml

然后查看像这样创建的入口:

$ kubectl get ing
NAME              RULE             BACKEND           ADDRESS          AGE
api-ingress       -                api-service:80    130.211.32.223   1h
                  api.example.com
                                   api-service:80

现在,假设您复制上面的 yaml 并更改服务、部署和 将名称传入 api-2 并创建它们。你最终会得到这样的结果:

$ kubectl get ing
NAME              RULE             BACKEND           ADDRESS          AGE
api-ingress       -                api-service:80    130.211.32.223   1h
                  api.example.com
                                   api-service:80
api-2-ingress     -                api-2-service:80  130.211.22.214   1h
                  api-2.example.com
                                   api-2-service:80

这很好...但我需要确保 *.example.com 的所有流量都流向 集群,以便入口可以发挥其魔力并将请求路由到正确的位置 服务。

我知道我可以创建一个入口资源并修补该资源,而不是 创建一个新的,但我试图避免这种情况,并且希望我可以为每个服务创建一个。

这有可能吗?

相关:https://github.com/kubernetes/kubernetes/issues/26935

最佳答案

每个入口资源都有一个单独的 IP。如果您需要在域之间共享单个 IP,则需要在同一入口资源中配置两个域。如果您不想直接在命令行上修补,请尝试使用 kubectl edit 。

关于google-compute-engine - 设置多个入口、服务、部署资源和 Cloud DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690219/

相关文章:

kubernetes - 在 GKE 的私有(private)集群上使用 Linkerd 时出现 "unable to retrieve the complete list of server APIs: tap.linkerd.io/v1alpha1"错误

kubernetes - 谷歌容器引擎中的Kubernetes Secret失败-/为就绪过程设置oom分数导致错误

google-app-engine - Kubernetes gcloud 容器引擎获取凭据错误

google-compute-engine - 启动脚本仅在实例重新启动后执行

python - Google 任务队列 REST 拉取偶尔返回 500

nginx - 如何使用 kubectl 删除网络策略?

Kubernetes Ingress - 如何将所有非 www 流量重写到 www 子域?

docker - 如何将 Container VM 上的 docker 容器与 list 链接?

networking - 无法使用自定义网络启动 GKE(Google Container Engine)集群

kubernetes - 无法在Kubernetes集群上更新Calico CNI配置