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

时间:2018-10-31 19:28:51

标签: kubernetes-ingress google-kubernetes-engine

我正在使用外部DNS,以获取更多背景信息。

我为应用程序“ 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 个答案:

答案 0 :(得分:1)

问题是名称空间+入口的名称太长,并且在后台创建的资源以相同的名称结尾,因为它们的字符数限制为64个字符,并且唯一部分被截断了。我在此处提交了一个错误,对其进行了更详细的说明。

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

如果<namespace>-<ingress>的前64个字符不是唯一的,则会遇到此问题。