在我的gce kube-cluster中,我使用nginx入口控制器而不是谷歌负载均衡器,通过使用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中运行,并在控制台“网络/负载 balancer ”中确认没有创建 Cloud 负载均衡器 .
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" . 现在使用浏览器/卷曲到达“http://104.196.xxx.xxx:31181 " or " 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
注意,防火墙规则的“default-allow-http”为“tcp:80”ngnix-ingress version = 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 " gets "端口80:连接拒绝" while " https://104.196.xxx.xxx:31462”工作正常吗?
谢谢 .
1 回答
当使用
NodePort
时,如NodePort documentation中非常清楚地描述的那样,它将Service
端口号转换为高位30,000范围内的随机(/ - )端口,Service
将在节点本身上使用 .想想看,如果
Service
alpha
想要侦听端口80,并且Service
beta
想要侦听端口80,那么同时群集中不能存在alpha
和beta
. 这两个端口(31181为80,31462为443)分配给Service
- 只要声明了Service
,群集中的其他任何内容都不会侦听这些端口 .