虚拟网络之Kubernetes service 详述

虚拟网络之Kubernetes service 详述

前言

Service是kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求进行负载分发到后端的各个容器应用上。

Service服务是一个虚拟概念,逻辑上代理后端pod。众所周知,pod生命周期短,状态不稳定,pod异常后新生成的pod ip会发生变化,之前pod的访问方式均不可达。通过service对pod做代理,service有固定的ip和port,ip:port组合自动关联后端pod,即使pod发生改变,kubernetes内部更新这组关联关系,使得service能够匹配到新的pod。这样,通过service提供的固定ip,用户再也不用关心需要访问哪个pod,以及pod是否发生改变,大大提高了服务质量。如果pod使用rc创建了多个副本,那么service就能代理多个相同的pod,通过kube-proxy,实现负载均衡。

集群中每个Node节点都有一个组件kube-proxy,实际上是为service服务的,通过kube-proxy,实现流量从service到pod的转发,kube-proxy也可以实现简单的负载均衡功能。

kube-proxy代理模式:userspace方式。kube-proxy在节点上为每一个服务创建一个临时端口,service的IP:port过来的流量转发到这个临时端口上,kube-proxy会用内部的负载均衡机制(轮询),选择一个后端pod,然后建立iptables,把流量导入这个pod里面。

实操创建svc

本实验是在我之前部署的Kubernetes 环境上操作的;感兴趣的朋友可以查看部署文档记录;

《记一次实操部署Kubernetes_v1.19.2》https://blog.csdn.net/LL845876425/article/details/109427804

# 配置测试nginx-svc
# 根据已有pod配置svc
[root@master ~]# kubectl get pods -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
centos-test-764675d946-jq6xb   1/1     Running   0          11d   192.168.0.16   master   <none>           <none>
centos-test-764675d946-tx4r5   1/1     Running   0          10d   192.168.1.2    node01   <none>           <none>
nginx-nets-7848d4b86f-ghpc2    1/1     Running   0          11d   192.168.0.15   master   <none>           <none>
nginx-nets-7848d4b86f-wkhvc    1/1     Running   0          10d   192.168.1.3    node01   <none>           <none>
static-web                     1/1     Running   0          11d   192.168.0.17   master   <none>           <none>
[root@master ~]#
[root@master ~]#
[root@master ~]#
[root@master ~]# cat install/svc-nginx-test.yaml
apiVersion: v1
kind: Service
metadata:
  name: test-nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80
[root@master ~]#
[root@master install]# kubectl apply -f svc-nginx-test.yaml

[root@master install]# kubectl get svc -o wide
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR
kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP    11d   <none>
test-nginx-service   ClusterIP   10.96.139.128   <none>        8080/TCP   2s    app=nginx

pod 内访问 svc ip:port

node 节点访问 svc ip:port

Kubernetes在创建Service时,根据Service的标签选择器(Label Selector)来查找Pod,据此创建与Service同名的EndPoints对象,Service的targetPort和Pod的IP地址都记录在与Service同名的EndPoints里。当Pod的地址发生变化时,EndPoints也随之变化。当Service接收到请求时,就能通过EndPoints找到请求需要转发的目标地址。

Service仅仅是一个抽象的实体,为其分配的IP地址也只是一个虚拟的IP地址,这背后真正负责转发请求的是运行在Node上的kube-proxy。

[root@master ~]#
[root@master ~]# kubectl get endpoints -o wide
NAME                 ENDPOINTS                        AGE
kubernetes           172.16.0.5:6443                  12d
test-nginx-service   192.168.0.15:80,192.168.1.3:80   20h
[root@master ~]#
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl get service -o wide
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR
kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP    12d   <none>
test-nginx-service   ClusterIP   10.96.139.128   <none>        8080/TCP   20h   app=nginx
[root@master ~]#

service 转发模式

新建svc 后,会根据kube-proxy 配置的 proxy mode(代理模式)进行对应转发规则的下发;

代理模式Kubernetes 版本是否默认
User space proxy modev1.0 +
Iptables proxy modev1.1 +默认
Ipvs proxy modev1.8 +

默认为 iptables 规则;

如果是ipvs 的话,需要在node上存在部署 ipvs ;

User space 代理模式

在 user space proxy mode 下:

  • kube-proxy 监听 kubernetes master 以获得添加和移除 Service / Endpoint 的事件
  • kube-proxy 在其所在的节点(每个节点都有 kube-proxy)上为每一个 Service 打开一个随机端口
  • kube-proxy 安装 iptables 规则,将发送到该 Service 的 ClusterIP(虚拟 IP)/ Port 的请求重定向到该随机端口
  • 任何发送到该随机端口的请求将被代理转发到该 Service 的后端 Pod 上(kube-proxy 从 Endpoint 信息中获得可用 Pod)
  • kube-proxy 在决定将请求转发到后端哪一个 Pod 时,默认使用 round-robin(轮询)算法,并会考虑到 Service 中的 SessionAffinity 的设定

如下图所示:

可见,这种mode最大的问题是,service的请求会先从用户空间进入内核iptables,然后再回到用户空间,由kube-proxy完成后端Endpoints的选择和代理工作,这样流量从用户空间进出内核带来的性能损耗是不可接受的。这也是k8s v1.0及之前版本中对kube-proxy质疑最大的一点,因此社区就开始研究iptables mode。

iptables 代理模式[默认模式]

在 iptables proxy mode 下:

  • kube-proxy 监听 kubernetes master 以获得添加和移除 Service / Endpoint 的事件

  • kube-proxy 在其所在的节点(每个节点都有 kube-proxy)上为每一个 Service 安装 iptable 规则

  • iptables 将发送到 Service 的 ClusterIP / Port 的请求重定向到 Service 的后端 Pod 上

    • 对于 Service 中的每一个 Endpoint,kube-proxy 安装一个 iptable 规则
      • 默认情况下,kube-proxy 随机选择一个 Service 的后端 Pod

如下图所示:

iptables proxy mode 的优点:

  • 更低的系统开销:在 linux netfilter 处理请求,无需在 userspace 和 kernel space 之间切换
  • 更稳定

与 user space mode 的差异:

  • 使用 iptables mode 时,如果第一个 Pod 没有响应,则创建连接失败
  • 使用 user space mode 时,如果第一个 Pod 没有响应,kube-proxy 会自动尝试连接另外一个后端 Pod

可以配置 Pod 就绪检查(readiness probe)确保后端 Pod 正常工作,此时,在 iptables 模式下 kube-proxy 将只使用健康的后端 Pod,从而避免了 kube-proxy 将请求转发到已经存在问题的 Pod 上。

IPVS 代理模式

在 IPVS proxy mode 下:

  • kube-proxy 监听 kubernetes master 以获得添加和移除 Service / Endpoint 的事件
  • kube-proxy 根据监听到的事件,调用 netlink 接口,创建 IPVS 规则;并且将 Service/Endpoint 的变化同步到 IPVS 规则中
  • 当访问一个 Service 时,IPVS 将请求重定向到后端 Pod

IPVS 模式的优点

IPVS proxy mode 基于 netfilter 的 hook 功能,与 iptables 代理模式相似,但是 IPVS 代理模式使用 hash table 作为底层的数据结构,并在 kernel space 运作。这就意味着

  • IPVS 代理模式可以比 iptables 代理模式有更低的网络延迟,在同步代理规则时,也有更高的效率
  • 与 user space 代理模式 / iptables 代理模式相比,IPVS 模式可以支持更大的网络流量

IPVS 提供更多的负载均衡选项:

  • rr: round-robin
  • lc: least connection (最小打开的连接数)
  • dh: destination hashing
  • sh: source hashing
  • sed: shortest expected delay
  • nq: never queue

TIP

  • 如果要使用 IPVS 模式,您必须在启动 kube-proxy 前为节点的 linux 启用 IPVS;
  • kube-proxy 以 IPVS 模式启动时,如果发现节点的 linux 未启用 IPVS,则退回到 iptables 模式;

代理模式总结

在所有的代理模式中,发送到 Service 的 IP:Port 的请求将被转发到一个合适的后端 Pod,而无需调用者知道任何关于 Kubernetes/Service/Pods 的细节。

Service 中额外字段的作用:
  • service.spec.sessionAffinity

    • 默认值为 “None”
      • 如果设定为 “ClientIP”,则同一个客户端的连接将始终被转发到同一个 Pod
  • service.spec.sessionAffinityConfig.clientIP.timeoutSeconds

    • 默认值为 10800 (3 小时)
      • 设定会话保持的持续时间
SVC 配置支持的协议(配置的yaml文件中可见该配置项):
  • TCP :默认值。任何类型的 Service 都支持 TCP 协议。
  • UDP :大多数 Service 都支持 UDP 协议。对于 LoadBalancer 类型的 Service,是否支持 UDP 取决于云供应商是否支持该特性。
  • HTTP :如果您的云服务商支持,您可以使用 LoadBalancer 类型的 Service 设定一个 Kubernetes 外部的 HTTP/HTTPS 反向代理,将请求转发到 Service 的 Endpoints。
  • Proxy Protocol :如果您的云服务上支持(例如 AWS),您可以使用 LoadBalancer 类型的 Service 设定一个 Kubernetes 外部的负载均衡器,并将连接已 PROXY 协议转发到 Service 的 Endpoints。
Kubernetes外界与Service之间的网络通信

根据应用场景的不同,Kubernetes提供了4种类型的Service:

  • ClusterIP:在集群内部的IP地址上提供服务,并且该类型的Service只能从集群内部访问。该类型为默认类型。
  • NodePort:通过每个Node IP上的静态端口(NodePort)来对外提供服务,集群外部可以通过访问:来访问对应的端口。在使用该模式时,会自动创建ClusterIP,访问NodePort的请求会最终路由到ClusterIP。
  • LoadBalancer:通过使用云服务提供商的负载均衡器对集群外部提供服务。使用该模式时,会自动创建NodePort和ClusterIP,集群外部的负载均衡器最终会将请求路由给NodePort和ClusterIP
  • ExternalName:将服务映射到集群外部的某个资源,例如foo.bar.example.com。使用该模式需要1.7版本或更高版本的kubedns。

ClusterIP 类型实操验证

默认创建的svc 类型即是 ClusterIP 类型;

[root@master ~]# cat install/svc-nginx-test.yaml
apiVersion: v1
kind: Service
metadata:
  name: test-nginx-service
  namespace: default
spec:
  selector:
    app: nginx
  #clusterIP:xx.xx.xx.xx
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80
[root@master ~]# kubectl apply -f install/svc-nginx-test.yaml
service/test-nginx-service created
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl  get svc -o wide
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE   SELECTOR
kubernetes           ClusterIP   10.96.0.1      <none>        443/TCP    17d   <none>
test-nginx-service   ClusterIP   10.96.200.75   <none>        8080/TCP   11s   app=nginx
[root@master ~]#
[root@master ~]#

service定义资源清单几个字段:

  • apiVersion: v1 版本
  • kind: Service 类型
  • metadata 元数据
  • spec 期望状态
    • ports:服务公开的端口列表;把哪个端口和后端建立联系
      • port:此服务将公开的端口
      • targetPort:要在服务所针对的pod上访问的端口的编号或名称
      • nodePort:K8S 集群节点上的端口
    • selector:标签选择器;关联到哪些pod资源上
    • clusterIP:服务的IP地址,通常由主服务器随机分配
    • type:确定服务的公开方式。默认为ClusterIP
      • ClusterIP(默认)
      • NodePort
      • LoadBalancer
      • ExternelName
    • sessionAffinity:service负载均衡,默认值是None,根据iptables规则随机调度;可使用sessionAffinity保持会话连线;
  • status 当前状态

创建svc 后,测试访问,并查看对应iptables 规则;

# 在pod 内 或 node 上,访问 cluster ip:port 即可
[root@master ~]# kubectl  get svc -o wide
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE   SELECTOR
kubernetes           ClusterIP   10.96.0.1      <none>        443/TCP    17d   <none>
test-nginx-service   ClusterIP   10.96.200.75   <none>        8080/TCP   11s   app=nginx
[root@master ~]#
[root@master ~]# curl -I 10.96.200.75:8080
HTTP/1.1 200 OK
Server: nginx/1.19.3
Date: Sun, 15 Nov 2020 07:38:16 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 29 Sep 2020 14:12:31 GMT
Connection: keep-alive
ETag: "5f7340cf-264"
Accept-Ranges: bytes

# svc对应 由 kube-proxy 下发的iptables 规则;主要是在
[root@master ~]# iptables-save | grep 10.96
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.1/32 -p tcp -m comment --comment "default/kubernetes:https cluster IP" -m tcp --dport 443 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp -m comment --comment "default/kubernetes:https cluster IP" -m tcp --dport 443 -j KUBE-SVC-NPX46M4PTMTKRN6Y
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-SVC-ERIFXISQEP7F7OF4
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:metrics cluster IP" -m tcp --dport 9153 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:metrics cluster IP" -m tcp --dport 9153 -j KUBE-SVC-JD5MR3NA4I4DYORP
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.200.75/32 -p tcp -m comment --comment "default/test-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.200.75/32 -p tcp -m comment --comment "default/test-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-SVC-MAU7ERFCJB7QMBT7
[root@master ~]#

# service 的主要转发规则,会在iptables nat 表中;
[root@master ~]# iptables -t nat -S  | grep -i service
-N KUBE-SERVICES
-A PREROUTING -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A OUTPUT -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
-A KUBE-SEP-HSRYBKZV7FW6O3LF -s 192.168.1.3/32 -m comment --comment "default/test-nginx-service" -j KUBE-MARK-MASQ
-A KUBE-SEP-HSRYBKZV7FW6O3LF -p tcp -m comment --comment "default/test-nginx-service" -m tcp -j DNAT --to-destination 192.168.1.3:80
-A KUBE-SEP-OGZKJHHGYTKD3UTQ -s 192.168.0.15/32 -m comment --comment "default/test-nginx-service" -j KUBE-MARK-MASQ
-A KUBE-SEP-OGZKJHHGYTKD3UTQ -p tcp -m comment --comment "default/test-nginx-service" -m tcp -j DNAT --to-destination 192.168.0.15:80
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.1/32 -p tcp -m comment --comment "default/kubernetes:https cluster IP" -m tcp --dport 443 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp -m comment --comment "default/kubernetes:https cluster IP" -m tcp --dport 443 -j KUBE-SVC-NPX46M4PTMTKRN6Y
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-SVC-ERIFXISQEP7F7OF4
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:metrics cluster IP" -m tcp --dport 9153 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:metrics cluster IP" -m tcp --dport 9153 -j KUBE-SVC-JD5MR3NA4I4DYORP
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.200.75/32 -p tcp -m comment --comment "default/test-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.200.75/32 -p tcp -m comment --comment "default/test-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-SVC-MAU7ERFCJB7QMBT7
-A KUBE-SERVICES -m comment --comment "kubernetes service nodeports; NOTE: this must be the last rule in this chain" -m addrtype --dst-type LOCAL -j KUBE-NODEPORTS
-A KUBE-SVC-MAU7ERFCJB7QMBT7 -m comment --comment "default/test-nginx-service" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-OGZKJHHGYTKD3UTQ
-A KUBE-SVC-MAU7ERFCJB7QMBT7 -m comment --comment "default/test-nginx-service" -j KUBE-SEP-HSRYBKZV7FW6O3LF
[root@master ~]#

这里发现kube-proxy 在下发iptables 规则时,会定义一些 chain 和动作;这个后面需要单独研究查看下;

这里通信时,经过 iptables 依赖的 内核架构 netfilter 进行处理时,匹配对应的规则,根据kube-porxy mode 类型进行流量转发;

NodePort 类型实操验证

NodePort 是 构建在ClusterIP上,并在路由到clusterIP的每个节点上分配一个端口;

  • client —> NodeIP:NodePort —> ClusterIP:ServicePort —> PodIP:containePort

环境实操:

# 构建svc ,注意type  类型  name 等字段的修改
[root@master ~]# cat install/svc-nodeport-nginx-test.yaml
apiVersion: v1
kind: Service
metadata:
  name: test-nodeport-nginx-service
  namespace: default
spec:
  selector:
    app: nginx
  clusterIP: 10.96.100.80
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80
      nodePort: 58080   
# 由于nodeport 范围导致报错,修改为30000 后,可以成功创建
[root@master ~]# kubectl apply -f install/svc-nodeport-nginx-test.yaml
The Service "test-nodeport-nginx-service" is invalid: spec.ports[0].nodePort: Invalid value: 58080: provided port is not in the valid range. The range of valid ports is 30000-32767
[root@master ~]# vim install/svc-nodeport-nginx-test.yaml
[root@master ~]# kubectl apply -f install/svc-nodeport-nginx-test.yaml
The Service "test-nodeport-nginx-service" is invalid: spec.ports[0].nodePort: Invalid value: 38080: provided port is not in the valid range. The range of valid ports is 30000-32767
[root@master ~]# vim install/svc-nodeport-nginx-test.yaml
[root@master ~]# kubectl apply -f install/svc-nodeport-nginx-test.yaml
service/test-nodeport-nginx-service created
[root@master ~]#
[root@master ~]# kubectl get svc -o wide
NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE   SELECTOR
kubernetes                    ClusterIP   10.96.0.1      <none>        443/TCP          17d   <none>
test-nginx-service            ClusterIP   10.96.200.75   <none>        8080/TCP         39m   app=nginx
test-nodeport-nginx-service   NodePort    10.96.100.80   <none>        8080:30000/TCP   17s   app=nginx
# 访问 node ip:nodePort 即可访问
[root@master ~]# curl 172.16.0.5:30000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master ~]#

查看node 上配置的iptables 规则;注意观察svc cluster ip 和 nodeport 等直接规则;

[root@master ~]# iptables-save | grep -i service
:KUBE-EXTERNAL-SERVICES - [0:0]
:KUBE-SERVICES - [0:0]
-A INPUT -m conntrack --ctstate NEW -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A INPUT -m conntrack --ctstate NEW -m comment --comment "kubernetes externally-visible service portals" -j KUBE-EXTERNAL-SERVICES
-A FORWARD -m conntrack --ctstate NEW -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A OUTPUT -m conntrack --ctstate NEW -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
:KUBE-SERVICES - [0:0]
-A PREROUTING -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A OUTPUT -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/test-nodeport-nginx-service" -m tcp --dport 30000 -j KUBE-MARK-MASQ
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/test-nodeport-nginx-service" -m tcp --dport 30000 -j KUBE-SVC-G2VUPYXWPERNYOKS
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
-A KUBE-SEP-7GV7E43HFI4VRRCF -s 192.168.0.15/32 -m comment --comment "default/test-nodeport-nginx-service" -j KUBE-MARK-MASQ
-A KUBE-SEP-7GV7E43HFI4VRRCF -p tcp -m comment --comment "default/test-nodeport-nginx-service" -m tcp -j DNAT --to-destination 192.168.0.15:80
-A KUBE-SEP-HSRYBKZV7FW6O3LF -s 192.168.1.3/32 -m comment --comment "default/test-nginx-service" -j KUBE-MARK-MASQ
-A KUBE-SEP-HSRYBKZV7FW6O3LF -p tcp -m comment --comment "default/test-nginx-service" -m tcp -j DNAT --to-destination 192.168.1.3:80
-A KUBE-SEP-O45TMXGAOB2HO4YB -s 192.168.1.3/32 -m comment --comment "default/test-nodeport-nginx-service" -j KUBE-MARK-MASQ
-A KUBE-SEP-O45TMXGAOB2HO4YB -p tcp -m comment --comment "default/test-nodeport-nginx-service" -m tcp -j DNAT --to-destination 192.168.1.3:80
-A KUBE-SEP-OGZKJHHGYTKD3UTQ -s 192.168.0.15/32 -m comment --comment "default/test-nginx-service" -j KUBE-MARK-MASQ
-A KUBE-SEP-OGZKJHHGYTKD3UTQ -p tcp -m comment --comment "default/test-nginx-service" -m tcp -j DNAT --to-destination 192.168.0.15:80
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.100.80/32 -p tcp -m comment --comment "default/test-nodeport-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.100.80/32 -p tcp -m comment --comment "default/test-nodeport-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-SVC-G2VUPYXWPERNYOKS
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.1/32 -p tcp -m comment --comment "default/kubernetes:https cluster IP" -m tcp --dport 443 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp -m comment --comment "default/kubernetes:https cluster IP" -m tcp --dport 443 -j KUBE-SVC-NPX46M4PTMTKRN6Y
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-SVC-ERIFXISQEP7F7OF4
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:metrics cluster IP" -m tcp --dport 9153 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:metrics cluster IP" -m tcp --dport 9153 -j KUBE-SVC-JD5MR3NA4I4DYORP
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d 10.96.200.75/32 -p tcp -m comment --comment "default/test-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.96.200.75/32 -p tcp -m comment --comment "default/test-nginx-service cluster IP" -m tcp --dport 8080 -j KUBE-SVC-MAU7ERFCJB7QMBT7
-A KUBE-SERVICES -m comment --comment "kubernetes service nodeports; NOTE: this must be the last rule in this chain" -m addrtype --dst-type LOCAL -j KUBE-NODEPORTS
-A KUBE-SVC-G2VUPYXWPERNYOKS -m comment --comment "default/test-nodeport-nginx-service" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-7GV7E43HFI4VRRCF
-A KUBE-SVC-G2VUPYXWPERNYOKS -m comment --comment "default/test-nodeport-nginx-service" -j KUBE-SEP-O45TMXGAOB2HO4YB
-A KUBE-SVC-MAU7ERFCJB7QMBT7 -m comment --comment "default/test-nginx-service" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-OGZKJHHGYTKD3UTQ
-A KUBE-SVC-MAU7ERFCJB7QMBT7 -m comment --comment "default/test-nginx-service" -j KUBE-SEP-HSRYBKZV7FW6O3LF
[root@master ~]#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值