在GKE clsuter中,我无法在内部http负载均衡器配置中使用主机名进行调用。这是生成的ingress 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后端服务/3个pods/80到8080 tcp转发/默认名称空间/NodePortingress service
:hellorest-ingress-i/internal http(s(lb/default namespace/10.178.100.7/健康检查没有问题
如注释中所述,为了使其工作,您需要有一个记录为a:hello
的DNS专用区域。这可以通过使用云控制台来完成。谷歌云私有DNS区域更详细地解释了这一点:
谷歌云DNS现在可以提供:
创建专用DNS区域,为您的专用网络资源(VM、负载平衡器等(提供DNS名称解析。
将专用区域连接到单个网络或多个网络,使您在设计内部网络时具有灵活性架构。
创建分层DNS体系结构,其中相同或重叠的区域可以在中的公共和私有区域之间共存云DNS,或跨不同的GCP网络。
利用基于IAM、特定于DNS的角色来委派管理或编辑访问权限,以管理或查看托管的专用区域。
所有必要的信息和示例都可以在链接的文章中找到。