繁体   English   中英

无法解析 GKE 内部 lb(入口)注册的主机

[英]Couldn't resolve host registered by GKE internal lb(ingress)

在 GKE clsuter 中,我无法在内部 http 负载均衡器配置中使用主机名进行调用。 这是生成的入口 yaml 文件。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/backends: '{"k8s1-d21262da-default-hellorest-backend-service-80-698951b3":"HEALTHY","k8s1-d21262da-kube-system-default-http-backend-80-43d0837a":"HEALTHY"}'
    ingress.kubernetes.io/forwarding-rule: k8s2-fr-h23zc63d-default-hellorest-ingress-i-jxaunyik
    ingress.kubernetes.io/target-proxy: k8s2-tp-h23zc63d-default-hellorest-ingress-i-jxaunyik
    ingress.kubernetes.io/url-map: k8s2-um-h23zc63d-default-hellorest-ingress-i-jxaunyik
    kubernetes.io/ingress.class: gce-internal
  creationTimestamp: "2021-04-08T09:29:50Z"
  finalizers:
  - networking.gke.io/ingress-finalizer-V2
  generation: 1
  managedFields:
  - apiVersion: extensions/v1beta1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:kubernetes.io/ingress.class: {}
      f:spec:
        f:rules: {}
    manager: GoogleCloudConsole
    operation: Update
    time: "2021-04-08T09:29:50Z"
  - apiVersion: networking.k8s.io/v1beta1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:ingress.kubernetes.io/backends: {}
          f:ingress.kubernetes.io/forwarding-rule: {}
          f:ingress.kubernetes.io/target-proxy: {}
          f:ingress.kubernetes.io/url-map: {}
        f:finalizers:
          .: {}
          v:"networking.gke.io/ingress-finalizer-V2": {}
      f:status:
        f:loadBalancer:
          f:ingress: {}
    manager: glbc
    operation: Update
    time: "2021-04-08T09:30:44Z"
  name: hellorest-ingress-i
  namespace: default
  resourceVersion: "39841"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/hellorest-ingress-i
  uid: 728a4e1b-8435-4b1e-a378-82665e7a8a6c
spec:
  rules:
  - host: hello
    http:
      paths:
      - backend:
          serviceName: hellorest-backend-service
          servicePort: 80
        pathType: ImplementationSpecific
status:
  loadBalancer:
    ingress:
    - ip: 10.178.100.7

在集群节点之一中,使用负载均衡器 IP 地址成功调用服务。 但是用主机名调用不起作用。

# success with ip
$ curl http://10.224.13.150/hello
I am hellorest-backend-67fddc48f9-5hnmg(10.220.0.7)

# cannot resolve host
$ curl http://hello/hello
curl: (6) Couldn't resolve host 'hello'

更多关于测试环境。

  • GKE Cluster :区域/私有集群/1.18.16-gke.302/2 个节点/控制平面 172.16.0.0/28,禁用全局访问/启用 http 负载平衡
  • deployed service :hellorest-backend-service / 3 pods / 80 到 8080 tcp 转发 / 默认命名空间 / NodePort
  • ingress service :hellorest-ingress-i / internal http(s) lb / default namespace / 10.178.100.7 / 健康检查没有问题

正如评论中已经提到的,为了使其工作,您需要有一个 DNS 私有区域,其记录为 A: hello 这可以通过使用云控制台来完成。 Google Cloud Private DNS Zones更详细地解释了这一点:

Google Cloud DNS 现在可以提供:

  1. 创建私有 DNS 区域,为您的私有网络资源(VM、负载均衡器等)提供 DNS 名称解析。

  2. 将专用区域连接到单个网络或多个网络,在设计内部网络架构时为您提供灵活性。

  3. 创建水平分割 DNS 架构,其中相同或重叠的区域可以在 Cloud DNS 中的公共区域和私有区域之间或跨不同的 GCP 网络共存。

  4. 利用基于 IAM 的、特定于 DNS 的角色来委派管理或编辑访问权限以管理或查看托管私有区域。

所有必要的信息和示例都可以在链接的文章中找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM