首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ngnix入口控制器公开为守护进程集。

将ngnix入口控制器公开为守护进程集。
EN

Stack Overflow用户
提问于 2019-09-18 22:33:29
回答 2查看 2.6K关注 0票数 1

我正在尝试安装并使用nginx来公开在kubernetes集群下运行的服务,并且我正在遵循这个使用说明

步骤4中,注意到

如果您创建了一个守护进程,那么Ingress控制器容器的端口80和443将映射到容器正在运行的节点的相同端口。若要访问侵入控制器,请使用这些端口和集群中正在运行Ingress控制器的任何节点的IP地址。

这意味着守护进程将监听端口80和443,将传入的通信量转发到由ingress.yaml配置文件映射的服务。

但是在运行指令3.2 kubectl apply -f daemon-set/nginx-ingress.yaml之后,创建了守护进程集,但是集群所有节点上的80或443都没有监听。

安装指令有问题吗?还是我漏掉了什么?

EN

回答 2

Stack Overflow用户

发布于 2019-09-19 01:12:00

它不是从netstat的输出中获得的典型的侦听。这是iptables的“听”。下面是我的集群节点上的入口控制器的iptables规则。

代码语言:javascript
复制
-A CNI-DN-0320b4db24e84e16999fd -s 10.233.88.110/32 -p tcp -m tcp --dport 80 -j CNI-HOSTPORT-SETMARK
-A CNI-DN-0320b4db24e84e16999fd -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.233.88.110:80
-A CNI-DN-0320b4db24e84e16999fd -s 10.233.88.110/32 -p tcp -m tcp --dport 443 -j CNI-HOSTPORT-SETMARK
-A CNI-DN-0320b4db24e84e16999fd -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.233.88.110:443

10.233.88.110是运行在该节点上的入口控制器的ip地址。

代码语言:javascript
复制
$ kubectl get pod -n ingress-nginx -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP              NODE          NOMINATED NODE   READINESS GATES
ingress-nginx-controller-5rh26   1/1     Running   1          77d   10.233.83.110   k8s-master3   <none>           <none>
ingress-nginx-controller-9nnwl   1/1     Running   1          77d   10.233.88.110   k8s-master2   <none>           <none>
ingress-nginx-controller-ckkb2   1/1     Running   1          77d   10.233.68.111   k8s-master1   <none>           <none>

编辑当请求到达80/443端口时,iptables将对此请求应用DNAT规则,将目标IP修改为入口控制器的ip地址。实际侦听在入口控制器容器内。

票数 2
EN

Stack Overflow用户

发布于 2019-09-23 14:13:10

正如杭都 (+1)所提到的,根据集群中用于--proxy-mode的默认设置

使用哪种代理模式:“userspace”(旧版)或“iptables”(更快)或“ipv”。如果为空,则使用最佳可用代理(当前为iptables).如果选择了iptables代理,不管如何选择,但是系统的内核或iptables版本还不够,这总是回到用户空间代理。

假设您在nginx-ingress-controller-xxx名称空间中有kube-system控制器,您可以使用这个命令来验证您端的这些参数:

代码语言:javascript
复制
sudo iptables-save | grep $(kubectl get pods -n kube-system -o wide | grep nginx-ingress-controller-xxx | awk '{print $6}')

有关iptables/netfilter的更多信息,您可以找到这里这里

追加资源:

更新

HostNetwork -控制pod是否可以使用节点网络命名空间。这样做可以让pod访问环回设备,在本地主机上侦听服务,并可用于窥探同一节点上其他荚的网络活动。

因此,除上述答案外:

为了将端口80和443直接绑定到Kubernetes节点的网络接口,您可以设置hostNetwork: true (但不建议这样做):

启用此选项时,每个系统守护进程都会在任何网络接口(包括主机的回送)上向NGINX Ingress控制器公开。请仔细评估这可能对您的系统安全产生的影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58001524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档