【发布时间】:2018-09-17 02:07:35
【问题描述】:
具体来说,为什么我在谷歌网站上关注directions在GKE上设置nginx入口时,会得到两个外部IP地址?
这两个 IP 地址分别用于 Ingress 资源和 LoadBalancer 类型的 Service 资源:
> kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
nginx-ingress example.com 1.1.1.1 80, 443 1d
> kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-app ClusterIP 10.31.251.77 <none> 8080/TCP 1d
kubernetes ClusterIP 10.31.240.1 <none> 443/TCP 1d
nginx-ingress-controller LoadBalancer 10.31.246.62 2.2.2.2 80:32603/TCP,443:31763/TCP 1d
nginx-ingress-default-backend ClusterIP 10.31.241.48 <none> 80/TCP 1d
这是我认为它的工作原理:
User
^
|
Service resource of type LoadBalancer <-- Ingress annotated as class nginx
^
|
Pod resource with Nginx acting as ingress controller
^
|
Service resource of type ClusterIP
^
|
Pod resource with server serving message at /hello
这基本上是我链接到的教程页面上的图表。所以我希望负载均衡器是 L4 类型并且有一个外部 IP (并且不花钱使用!)。而且我希望 Ingress(尽管它的名字)没有有一个外部 IP,因为我用注释标记它
annotations:
kubernetes.io/ingress.class: nginx
Google 应该可以识别出我不希望 Ingress 资源使用他们付费的 L7 HTTP 负载均衡器,而是使用我自己的 Nginx 控制器。
我注意到我的/hello 页面可以通过负载平衡器的 IP 地址访问,但访问入口地址会导致连接尝试被拒绝错误。然而,它是具有 host: 和 tls: 设置的 Ingress 资源。那么我应该将我的 TLS 证书与哪个资源相关联?为什么 Ingress 资源是可以访问我的网站的 LoadBalancer IP 时指定一个域名?
【问题讨论】:
标签: nginx kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress