代码之家  ›  专栏  ›  技术社区  ›  swagrov

GKE上的一个GCE入口导致不同的GCE入口服务于默认后端

  •  0
  • swagrov  · 技术社区  · 6 年前

    我使用外部域名系统,为额外的背景。

    我为应用程序“A”设置了一个服务、部署和入口,所有这些都按预期工作,我可以在指定的URL访问应用程序A。然后我为应用程序“B”设置了一个类似的东西,现在我 可以 到达应用程序B,但是如果我点击了为应用程序A指定的URL,我会得到 default backend - 404 信息。我以前没见过这个问题,有什么问题?以下是A和B的服务、部署和入口清单:

    A:服务:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-A
    spec:
      ports:
        - name: https
          port: 443
          protocol: TCP
          targetPort: 3000
        - name: http
          port: 80
          protocol: TCP
          targetPort: 3000
      selector:
        run: my-app-A
      type: NodePort
    

    A:部署:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: my-app-A
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            run: my-app-A
        spec:
          containers:
            - name: my-app-A
              image: this-is-my-docker-image
              imagePullPolicy: Always
              envFrom:
                - secretRef:
                    name: my-app-A-secrets
                - configMapRef:
                    name: my-app-A-configmap
              ports:
                - containerPort: 3000
    

    A:入口:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: my-app-A
      annotations:
        external-dns.alpha.kubernetes.io/hostname: "A.myurl.com"
        kubernetes.io/ingress.class: "gce"
        kubernetes.io/ingress.allow-http: "true"
    spec:
      rules:
      - host: "A.myurl.com"
        http:
          paths:
          - path: /*
            backend:
              serviceName: my-app-A
              servicePort: 80
      - host: "my-app-A-namespace.clusterbase.myurl.com"
        http:
          paths:
          - path: /*
            backend:
              serviceName: my-app-A
              servicePort: 80
    

    对于B的清单,将“A”的所有实例替换为“B”,并替换为 external-dns.alpha.kubernetes.io/hostname: "A.myurl.com" external-dns.alpha.kubernetes.io/hostname: "myurl.com" .

    1 回复  |  直到 6 年前
        1
  •  1
  •   swagrov    6 年前

    问题是名称空间+入口的名称太长,在后台创建的资源以相同的名称结束,因为它们有64个字符的限制,唯一部分被截断。我在这里提交了一个bug,详细解释了它。

    https://github.com/kubernetes/ingress-gce/issues/537

    <namespace>-<ingress> 不是唯一的。