分析kube-proxy的iptables规则
NodePort service
创建一个mysql的NodePort服务,对应两个pod实例,rc和service的配置如下:
1、rc配置
apiVersion: v1
kind: ReplicationController
metadata:
name: wordpress-mysql
spec:
replicas:
selector:
name: wordpress-mysql
template:
metadata:
labels:
name: wordpress-mysql
spec:
containers:
- name: wordpress-mysql
image: 172.16.114.201/library/mysql:v1
ports:
- containerPort:
volumeMounts:
- name: "wordpress-mysql-data"
mountPath: "/var/lib/mysql"
env:
- name: MYSQL_PASS
value: ""
- name: ON_CREATE_DB
value: "wordpress"
volumes:
- name: "wordpress-mysql-data"
hostPath:
path: "/root/wordpress-mysql/data"
2、service配置
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
spec:
ports:
- port:
targetPort:
nodePort:
protocol: TCP
type: NodePort
selector:
name: wordpress-mysql
3、创建的service情况
Name: wordpress-mysql
Namespace: default
Labels: <none>
Selector: name=wordpress-mysql
Type: NodePort
IP: 10.254.67.85
Port: <unset> /TCP
NodePort: <unset> /TCP
Endpoints: 10.0.3.2:,10.0.45.6:
Session Affinity: None
No events.
4、kube-proxy占用端口情况
[root@test- log]# netstat -anp | grep kube-proxy
tcp 127.0.0.1: 0.0.0.0:* LISTEN /kube-proxy
tcp 172.16.114.209: 172.16.114.208: ESTABLISHED /kube-proxy
tcp 172.16.114.209: 172.16.114.208: ESTABLISHED /kube-proxy
tcp 172.16.114.209: 172.16.114.208: ESTABLISHED /kube-proxy
tcp6 ::: :::* LISTEN /kube-proxy
unix [ ] DGRAM /kube-proxy
unix [ ] STREAM CONNECTED /kube-proxy
5、对应的iptables规则
iptables -S -t nat | grep mysql
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/wordpress-mysql:" -m tcp --dport -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/wordpress-mysql:" -m tcp --dport -j KUBE-SVC-GJ6HULPZPPQIKMS7
-A KUBE-SEP-7KXQQUXVSZ2LFV44 -s 10.0.45.6/ -m comment --comment "default/wordpress-mysql:" -j KUBE-MARK-MASQ
-A KUBE-SEP-7KXQQUXVSZ2LFV44 -p tcp -m comment --comment "default/wordpress-mysql:" -m tcp -j DNAT --to-destination 10.0.45.6:
-A KUBE-SEP-J7SZJXRP24HRFT23 -s 10.0.3.2/ -m comment --comment "default/wordpress-mysql:" -j KUBE-MARK-MASQ
-A KUBE-SEP-J7SZJXRP24HRFT23 -p tcp -m comment --comment "default/wordpress-mysql:" -m tcp -j DNAT --to-destination 10.0.3.2:
-A KUBE-SERVICES -d 10.254.67.85/ -p tcp -m comment --comment "default/wordpress-mysql: cluster IP" -m tcp --dport -j KUBE-SVC-GJ6HULPZPPQIKMS7
-A KUBE-SVC-GJ6HULPZPPQIKMS7 -m comment --comment "default/wordpress-mysql:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-J7SZJXRP24HRFT23
-A KUBE-SVC-GJ6HULPZPPQIKMS7 -m comment --comment "default/wordpress-mysql:" -j KUBE-SEP-7KXQQUXVSZ2LFV44
从以上信息看出,kube-proxy为mysql服务在node节点上单独起了一个端口30010,在iptables的规则中,目的端口30010被指向KUBE-SVC-GJ6HULPZPPQIKMS7,KUBE-SVC-GJ6HULPZPPQIKMS7又被指向KUBE-SEP-J7SZJXRP24HRFT23和KUBE-SEP-7KXQQUXVSZ2LFV44(他两各50%的几率),KUBE-SEP-J7SZJXRP24HRFT23和KUBE-SEP-7KXQQUXVSZ2LFV44定义了DNAT转换规则,将访问重定向到10.0.45.6:3306和10.0.3.2:3306这两个endpoint。因此,当外部访问30010端口时,根据iptables的规则会将该消息分发给10.0.45.6:3306和10.0.3.2:3306这两个地址(分发的几率是各50%)
ClusterIP service
创建一个zookeeper的ClusterIP服务,rc和service的配置如下:
1、rc配置
apiVersion: v1
kind: ReplicationController
metadata:
name: zookeeper1
spec:
replicas:
selector:
name: zookeeper1
template:
metadata:
labels:
name: zookeeper1
spec:
containers:
- name: zookeeper1
image: 10.10.30.166/public/zookeeper:v1
ports:
- containerPort:
- containerPort:
- containerPort:
env:
- name: ZOOKEEPER_ID
value: ""
- name: ZOOKEEPER_SERVER_1
value: "zookeeper1"
- name: ZOOKEEPER_SERVER_2
value: "zookeeper2"
- name: ZOOKEEPER_SERVER_3
value: "zookeeper3"
2、service配置
apiVersion: v1
kind: Service
metadata:
name: zookeeper1
spec:
ports:
- port:
targetPort:
protocol: TCP
name: ""
- port:
targetPort:
protocol: TCP
name: ""
- port:
targetPort:
protocol: TCP
name: ""
type: ClusterIP
selector:
name: zookeeper1
3、创建service情况
Name: zookeeper1
Namespace: default
Labels: <none>
Selector: name=zookeeper1
Type: ClusterIP
IP: 10.254.181.6
Port: /TCP
Endpoints: 10.0.45.4:
Port: /TCP
Endpoints: 10.0.45.4:
Port: /TCP
Endpoints: 10.0.45.4:
Session Affinity: None
No events.
4、iptables规则
iptables -S -t nat | grep zookeeper1
-A KUBE-SEP-BZJZKIUQRVYJVMQB -s 10.0.45.4/ -m comment --comment "default/zookeeper1:3" -j KUBE-MARK-MASQ
-A KUBE-SEP-BZJZKIUQRVYJVMQB -p tcp -m comment --comment "default/zookeeper1:3" -m tcp -j DNAT --to-destination 10.0.45.4:
-A KUBE-SEP-C3J2QHMJ3LTD3GR7 -s 10.0.45.4/ -m comment --comment "default/zookeeper1:2" -j KUBE-MARK-MASQ
-A KUBE-SEP-C3J2QHMJ3LTD3GR7 -p tcp -m comment --comment "default/zookeeper1:2" -m tcp -j DNAT --to-destination 10.0.45.4:
-A KUBE-SEP-RZ4H7H2HFI3XFCXZ -s 10.0.45.4/ -m comment --comment "default/zookeeper1:1" -j KUBE-MARK-MASQ
-A KUBE-SEP-RZ4H7H2HFI3XFCXZ -p tcp -m comment --comment "default/zookeeper1:1" -m tcp -j DNAT --to-destination 10.0.45.4:
-A KUBE-SERVICES -d 10.254.181.6/ -p tcp -m comment --comment "default/zookeeper1:1 cluster IP" -m tcp --dport -j KUBE-SVC-HHEJUKXW5P7DV7BX
-A KUBE-SERVICES -d 10.254.181.6/ -p tcp -m comment --comment "default/zookeeper1:2 cluster IP" -m tcp --dport -j KUBE-SVC-2SVOYTXLXAXVV7L3
-A KUBE-SERVICES -d 10.254.181.6/ -p tcp -m comment --comment "default/zookeeper1:3 cluster IP" -m tcp --dport -j KUBE-SVC-KAVJ7GO67HRSOAM3
-A KUBE-SVC-2SVOYTXLXAXVV7L3 -m comment --comment "default/zookeeper1:2" -j KUBE-SEP-C3J2QHMJ3LTD3GR7
-A KUBE-SVC-HHEJUKXW5P7DV7BX -m comment --comment "default/zookeeper1:1" -j KUBE-SEP-RZ4H7H2HFI3XFCXZ
-A KUBE-SVC-KAVJ7GO67HRSOAM3 -m comment --comment "default/zookeeper1:3" -j KUBE-SEP-BZJZKIUQRVYJVMQB
从iptables的规则来看,对目的ip是10.254.181.6,端口是2181、2888或者3888的消息,规则指向了KUBE-SVC-HHEJUKXW5P7DV7BX、KUBE-SVC-2SVOYTXLXAXVV7L3、KUBE-SVC-KAVJ7GO67HRSOAM3,他们三又分别指向了KUBE-SEP-C3J2QHMJ3LTD3GR7、KUBE-SEP-RZ4H7H2HFI3XFCXZ、KUBE-SEP-BZJZKIUQRVYJVMQB,这三条规则定义了DNAT转换规则,将访问重定向到了10.0.45.4:3888、10.0.45.4:2888、10.0.45.4:2181
分析kube-proxy的iptables规则的更多相关文章
- Linux 为FTP 服务器添加iptables规则--案例分析
一.故障描述 由于开发提出需求,为他们搭建内部ftp服务器,搭建好后,提交给他们,测试可以正常使用.后来过了一段时间后,有一天无法登陆了.于是去ftp主机上检查问题,ftp的配置文件没有改动,端口监听 ...
- iptables规则进阶
iptables规则进阶 1.实验环境搭建: 在进行试验之前,先要进行实验环境的搭建,要求如下: 1.对于三台主机,分别设置IP地址 2.设置10.0.1.22为内网主机 3.设置中间主机有两个网卡, ...
- Iptables 规则 一些简单实例和详细介绍
设定规则 iptables -p INPUT DROP iptables -p OUTPUT ACCEPT iptables -p FORWARD DROP 1.防止外网用内网IP欺骗 iptable ...
- iptables规则表
1.iptables规则表 Filter(针对过滤系统):INPUT.FORWARD.OUTPUT NAT(针对地址转换系统):PREROUTING.POSTROUTING.INPUT.OUTPUT ...
- linux iptables规则介绍
今天又学习了一下iptables,做一点总结来方便以后查阅. Netfilter(网络过滤器)是Linux操作系统核心层内部的一个数据包处理模块,主要负责数据包的拦截和转发,而iptables是Net ...
- debian6保存iptables规则
iptables规则不保存,一旦机器重启规则就清空了,所以需要保存: iptables-save >/etc/iptables-script vi /etc/rc.local 然后在文件中输入: ...
- linux系统中查看己设置iptables规则
1.iptables -L 查看filter表的iptables规则,包括所有的链.filter表包含INPUT.OUTPUT.FORWARD三个规则链. 说明:-L是--list的简写,作用是列出规 ...
- ifconfig 命令,改变主机名,改DNS hosts、关闭selinux firewalld netfilter 、防火墙iptables规则
ifconfig 命令用于查看网络相关的命令: 安装:yum install net-tools -y ifdown eth_name 关闭网卡 ifup eth_name 开启网卡 配 ...
- 常用的 Linux iptables 规则
一些常用的 Linux iptables 规则,请根据自己的具体需要再修改. 转载自:http://mp.weixin.qq.com/s/uAPzh9_D4Qk6a3zBh7Jq5A # 1. 删除所 ...
随机推荐
- 强大实用的jQuery幻灯片插件Owl Carousel
演 示 下 载 简介 Owl Carousel 是一个强大.实用但小巧的 jQuery 幻灯片插件,它具有一下特点: 兼容所有浏览器 支持响应式 支持 CSS3 过度 支持触摸事件 支持 JSON 及 ...
- Spark Streaming no receivers彻底思考
数据接入Spark Streaming的二种方式:Receiver和no receivers方式 建议企业级采用no receivers方式开发Spark Streaming应用程序,好处: 1.更优 ...
- php.in
[PHP] ;;;;;;;;;;; ; WARNING ; ;;;;;;;;;;; ; This is the default settings file for new PHP installati ...
- TestNG 五 运行TestNG
一.并行运行于超时 可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中.这个属性可以带有如下这样的值: <suite name="My suite&q ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在初始化的时候写入参数
最常见的是定义一个全局变量,然后跟对应的变量绑定,比如我定义了一个SINT型的变量ControlWord 数值是8,定义好之后编译一下,可以发现PLC程序中或多出来这个变量(MAIN.ControlW ...
- Win7是否可以把光盘当作U盘用
光盘当作U盘用 在Windows 7刻录功能中,之前有看到一篇文章<Windows7 新功能 光盘当U盘用>(感兴趣的同学可以百度一下),文章的意思大致是说作者插入了一张空的DVD光盘,然 ...
- liunx系统安装tomcat的方法
安装tomcat前需要先安装jdk,安装jdk的方法参考我的上一篇文章:liunx系统安装jdk的方法 1.下载tomcat 下载地址:http://tomcat.apache.org/downloa ...
- 本地化,将cancel替换成"取消"
在工程文件中选info,添加下面内容
- 算法笔记_162:算法提高 复数归一化(Java)
目录 1 问题描述 2 解决方案 1 问题描述 编写函数Normalize,将复数归一化,即若复数为a+bi,归一化结果为a/sqrt(a*a+b*b) + i*b/sqrt(a*a+b*b) . ...
- java编写Loadrunner脚本
web.set_max_html_param_len("1000000"); lr.start_transaction("red_envelop"); web. ...