链式CNI插件与portmap端口映射
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链式CNI插件与portmap端口映射相关的知识,希望对你有一定的参考价值。
参考技术A CNI插件支持依赖关系,有依赖关系的CNI插件会进行多次调用,譬如flannel插件调用bridge插件来完成网桥的创建和IP的获取等。这种CNI插件的依赖关系现实,每个插件依赖于上一次调度的插件的返回结果。而链式插件也会执行多个插件的多次调用,每一个链式插件会依赖于都依赖于容器运行时信息,下图描述了插件的链式调用。
在进行ADD操作的过程中,在第一个插件运行后,运行时信息必须添加一个prevResult字段到接着运行的插件的配置中,prevResult内容为上一次查询运行的输出信息。
portmap 是一个链式插件,它的作用是把容器的IP和端口通过iptables映射到宿主机的端口上,让外部业务可以通过访问宿主机ip和端口来访问容器内的服务。
下面我们来测试一下链式CNI的效果,首先在/etc/cni/net.d目录下准备一个配置文件:
portmap是基于iptables来实现端口映射,所以在操作之前我们先看一下清空一下系统中的iptables规则和规则链。
下面我们来创建一个网络命名空间,并通过cnitool给它配置想用的网络。
这个命令会最终调用cni插件进行网络空间的网卡配置,我们可以通过下面命令来查看配置的网络信息:
网络配置是成功的,对应的网络空间的ip地址为:10.10.10.7,下面我们来分析一下,前面的portmap的执行情况。
portmap的配置参数,是通过环境变量CAP_ARGS传入的,其中指定了hostPort:8080,containerPort:80,那么就是要求我们把容器中的80端口映射到宿主机的8080端口上,portmap会生成相应的iptables规则来达到这个目的:
这些规则中,主要是实现DNAT的匹配完成端口的映射功能,并对外只会暴漏主机的ip和port信息。
安装cni网络插件-非必须
安装cni网络插件 安装cni # 安装 cni # 百度云链接:https://pan.baidu.com/s/1-PputObLs5jouXLnuBCI6Q 密码:tzqm cd /server/software/k8s wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz mkdir -pv /opt/cni/bin tar xf cni-plugins-amd64-v0.7.1.tgz -C /opt/cni/bin ls -l /opt/cni/bin cd $HOME vi /etc/cni/net.d/10-mynet.conf { "cniVersion": "0.7.0", "name": "mynet", "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "ipam": { "type": "host-local", "subnet": "172.30.0.0/16", "routes": [ { "dst": "0.0.0.0/0" } ] } } cat >/etc/cni/net.d/99-loopback.conf <<EOF { "cniVersion": "0.6.0", "name": "lo", "type": "loopback" } EOF 获取subnet: etcdctl --endpoints=${ETCD_ENDPOINTS} --ca-file=/etc/kubernetes/cert/ca.pem --cert-file=/etc/flanneld/cert/flanneld.pem --key-file=/etc/flanneld/cert/flanneld-key.pem ls ${FLANNEL_ETCD_PREFIX}/subnets /kubernetes/network/subnets/172.30.43.0-24 /kubernetes/network/subnets/172.30.49.0-24 /kubernetes/network/subnets/172.30.30.0-24 /kubernetes/network/subnets/172.30.44.0-24 echo 1 > /sys/devices/virtual/net/docker0/bridge/nf_call_iptables 插件必须设置net/bridge/bridge-nf-call-iptables sysctl为1,以确保iptables代理功能正常。 参照地址: k8s这区文档: https://k8smeetup.github.io/docs/concepts/cluster-administration/network-plugins/
以上是关于链式CNI插件与portmap端口映射的主要内容,如果未能解决你的问题,请参考以下文章