【问题标题】:gce nginix-ingress type NodePort and port:80 connection refusedgce nginx-ingress 类型 NodePort 和端口:80 连接被拒绝
【发布时间】:2018-03-05 03:43:56
【问题描述】:

在我的 gce kube-cluster 中,我使用 nginx 入口控制器而不是 google 负载均衡器,通过使用带有 NodePort 的“nginx-ingress”而不是类型 LoadBalance,如下所示:

helm install --name my-lb stable/nginx-ingress --set controller.service.type=NodePort

由于 nginx-controller 部署为“conroller.service.type=NodePort”,nodePorts 被打开/分配(kubect get svc),也获得了外部 ip 104.196.xxx.xxx。 此时 nginx-ingress-controller 正在 kube-cluster 中运行,并在控制台“网络/负载均衡”中确认没有创建云负载均衡器。

kubectl get svc
NAME                                  CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
my-lb-nginx-ingress-controller        10.39.249.242   <nodes>       80:31181/TCP,443:31462/TCP   15h
my-lb-nginx-ingress-default-backend   10.39.246.94    <none>        80/TCP                       15h

之后,在控制台“networking/firewall”中创建新的防火墙规则以允许节点端口“tcp:31181;tcp:31462”。 现在使用浏览器/curl 访问“http://104.196.xxx.xxx:31181”或“https://104.196.xxx.xxx:31462”会得到来自 ngnix 控制器的响应......效果很好。

但是,通过端口 80 的端口访问不起作用。当我在“http://104.196.xxx.xxx:80”上卷曲时,返回连接被拒绝,如下所示:

* connect to 104.196.xxx.xxx port 80 failed: Connection refused

注意, 防火墙规则对“tcp:80”有“default-allow-http” ngnix-ingress 版本 = nginx-ingress-0.8.5 kube-server-version = Major:"1", Minor:"7", GitVersion:"v1.7.5"

helm ls
NAME        REVISION    UPDATED                     STATUS      CHART               NAMESPACE
my-lb       1           Fri Sep 22 23:05:30 2017    DEPLOYED    nginx-ingress-0.8.5 default  


kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.5", GitCommit:"17d7182a7ccbb167074be7a87f0a68bd00d58d97", GitTreeState:"clean", BuildDate:"2017-08-31T08:56:23Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

知道为什么“https://104.196.xxx.xxx:80”在“https://104.196.xxx.xxx:31462”工作正常时得到“端口 80:连接被拒绝”吗?

谢谢。

【问题讨论】:

  • 我目前正好遇到同样的问题。你能找到解决方法吗?

标签: nginx kubernetes google-cloud-platform google-kubernetes-engine google-compute-engine


【解决方案1】:

当使用NodePort 时,正如NodePort documentation 中非常清楚地描述的那样,它将Service 端口号转换为Service 将使用的高30,000 范围内的随机(+/-) 端口在节点本身上。

想一想,如果Service alpha 想在端口 80 上侦听,Service beta 想在端口 80 上侦听,没有这种转换机制 alphabeta 就无法存在同时在集群中。这两个端口(31181 代表 80,31462 代表 443)分配给 Service——只要声明了 Service,集群中的任何其他端口都不会监听这些端口。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2019-12-18
    相关资源
    最近更新 更多