k8s 多网卡方案multus

news2024/11/8 19:44:49

kubernetes 多网卡方案之 Multus_CNI 部署以及基本使用

一、multus cni 出现的背景

在k8s的环境中启动一个容器,默认情况下只存在两个虚拟网络接口(loopback 和 eth0), loopback 的流量始终都会在本容器内或本机循环,对业务起到支撑作用的是 eth0,能够满足大部分的业务场景。

但是当一个应用或服务既需要对外提供 API 调用服务,也需要满足自身基于分布式特性产生的数据同步(一些业务场景的控制面和数据面的分离场景),那么这时候一张网卡的性能显然很难达到生产级别的要求,网络流量延时、阻塞便成为此应用的一项瓶颈。

为了实现生产环境的实际需求,出现了许多容器多网络方案。根据开源社区活跃度、是否实现 CNI 规范以及稳定性,大部分场景使用 multus-cni 作为在 K8s 环境下的容器多网络方案。

二、multus cni 介绍

Multus CNI 是一种符合CNI规范的开源插件,为实现 K8s环境下容器多网卡而提出的解决方案并与其他 CNI 插件搭配使用。Multus CNI 本身不提供网络配置功能,它是通过用其他满足 CNI 规范的插件进行容器的网络配置。

如下图所示,当集群环境存在 Multus CNI 插件并添加额外配置后,将会发现此容器内不再仅有 eth0 接口
在这里插入图片描述
CNI 是一组限于容器网络面的规范,定义了容器网络资源创建、管理的规则。其自身实现并提供了内置且通用的网络插件,同时为第三方实现其规范预留了扩展。
cni类型如下:

类型作用插件
Main负责容器接口(网桥、虚拟网卡)的创建bridge、ipvlan、macvlan、ptp等
Ipampod Ip地址的分配管理host-local、dhcp、calico-ipam、static等
Meta用于和第三方插件适配扩展应用或则内核参数调整tuning、bandwidth、portmap等

以上可以得知,Multus CNI 属于 Meta 类, 它可以与其他第三方插件适配,主插件来作为 Pod 的主网络并且被 K8s所感知,它们可以搭配使用且不冲突。

Main 插件是用于在集群中创建额外的网络:

1:bridge:创建基于网桥的额外网络可让同一主机中的 Pod 相互通信,并与主机通信。
2:host-device:创建 host-device 额外网络可让 Pod 访问主机系统上的物理以太网网络设备。
3:macvlan:创建基于 macvlan 的额外网络可让主机上的 Pod 通过使用物理网络接口与其他主机和那些主机上的 Pod 通信。附加到基于 macvlan 的额外网络的每个 Pod 都会获得一个唯一的 MAC 地址。
4:ipvlan:创建基于 ipvlan 的额外网络可让主机上的 Pod 与其他主机和那些主机上的 Pod 通信,这类似于基于 macvlan 的额外网络。与基于 macvlan 的额外网络不同,每个 Pod 共享与父级物理网络接口相同的 MAC 地址。
5:SR-IOV:创建基于 SR-IOV 的额外网络可让 Pod 附加到主机系统上支持 SR-IOV 的硬件的虚拟功能 (VF) 接口。

###############################################################
Ipam(IP Address Management)插件主要用来负责分配 IP 地址:

1:dhcp插件,节点上需要有 DHCP server;
2:host-local插件 ,是给定子网范围,在单个几点上基于这个子网进行 ip 地址分配;
3:static插件,静态地址管理,直接指定 ip 地址使用的。
4:calico-ipam ,是 clalico cni 自己的 ip 地址分配插件,是一种集中式 ip 分配插件;
5:whereabouts ,也是一个集中式 ip 分配插件,用的比较少,使用了 sriov 设备才用到的,这个是 k8snetworkplumbingwg 社区开源的。

###########################################
Meta 插件:由 CNI 社区维护的内部插件

1:flannel,这就是专门为 Flannel 项目提供的 CNI 插件;
2:tunning,是一个通过 sysctl 调整网络设备参数的二进制文件;
3:portmap ,是一个通过 iptables 配置端口映射的二进制文件;
4:bandwidth ,是一个使用 Token Bucket Filter(TBF)来进行限流的二进制文件;
5:calico,是专门为 Calico 项目提供的 CNI 插件。

三、multus cni 部署

本次测试环境中使用的主cni为calico,网络模式是ipip模式,如下:

[root@node1 ~]# kubectl get po -A  | grep calico
kube-system            calico-kube-controllers-75c594996d-x49mw     1/1     Running   5 (13d ago)    206d
kube-system            calico-node-htq5b                            1/1     Running   1 (13d ago)    206d
kube-system            calico-node-x6xwl                            1/1     Running   1 (13d ago)    206d
kube-system            calico-node-xdx46                            1/1     Running   1 (13d ago)    206d

#######查看IPIPMODE为Always
[root@node1 ~]# calicoctl  get ippool -o wide 
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR   
default-ipv4-ippool   10.233.64.0/18   true   Always     Never       false      false              all()      

下载multus cni文件部署multus 服务

1: 克隆文件
git clone https://github.com/k8snetworkplumbingwg/multus-cni.git && cd multus-cni/deployments

##################################
2:部署服务
[root@node1 deployments]# kubectl  apply -f multus-daemonset-thick.yml
customresourcedefinition.apiextensions.k8s.io/network-attachment-definitions.k8s.cni.cncf.io changed
clusterrole.rbac.authorization.k8s.io/multus changed
clusterrolebinding.rbac.authorization.k8s.io/multus changed
serviceaccount/multus changed
configmap/multus-daemon-config changed
daemonset.apps/kube-multus-ds created
[root@node1 deployments]# 

#################################
3:查看multus服务是否正常
[root@node1 ~]# kubectl get ds -n kube-system  | grep multus
kube-multus-ds   3         3         3       3            3           <none>                   44s
[root@node1 ~]# 
[root@node1 ~]# kubectl get po -o wide  -n kube-system  | grep multus
kube-multus-ds-fqdxg                       1/1     Running   0              53s    192.168.5.126   node2   <none>           <none>
kube-multus-ds-gx2c7                       1/1     Running   0              53s    192.168.5.27    node3   <none>           <none>
kube-multus-ds-z2j4n                       1/1     Running   0              53s    192.168.5.79    node1   <none>           <none>
[root@node1 ~]# 

multus cni作为ds 进程,会在每个节点做已下操作

1:在每个节点运行multus-daemon进程
[root@node1 net.d]# ps -ef | grep multus 
root     25811 25696  0 18:33 ?        00:00:00 /usr/src/multus-cni/bin/multus-daemon
root     31445 14072  0 18:43 pts/0    00:00:00 grep --color=auto multus
[root@node1 net.d]# 

#################################
2:在每个节点的/opt/cni/bin/上生成一个 Multus 二进制可执行文件。可执行文件的作用是配置 Pod 的网络栈,DaemonSet 的作用是实现网络互通。
[root@node1 net.d]# ll /opt/cni/bin/  | grep multus 
-rwxr-xr-x 1 root root 45946850 Nov  1 18:33 multus-shim
[root@node1 net.d]# 

注意:一个 Network Namespace 的网络栈包括:网卡(Network interface)、回环设备(Loopback Device)、路由表(Routing Table)和 iptables 规则。

##########################
3:在每个节点的/etc/cni/net.d目录下生成00-multus.conf,如下:
[root@node1 net.d]# cat 00-multus.conf  | jq .
{
  "capabilities": {
    "bandwidth": true,
    "portMappings": true
  },
  "cniVersion": "0.3.1",
  "logLevel": "verbose",
  "logToStderr": true,
  "name": "multus-cni-network",
  "clusterNetwork": "/host/etc/cni/net.d/10-calico.conflist",  ##从此文件读取集群calico网络配置(版本不一样,文件内容可能会有差异,以自己环境为准)
  "type": "multus-shim"
}

至此multus cni的部署已经完成,接下来需要测试使用,网上的一些教程使用的大部分是macvlan的形式,比较简单。本次我们打算使用calico和flannel两种cni相结合的方式来实现pod 的多网卡方案。

四、环境信息

已有环境的信息如下:

calico网络作为master plugin,走eth0网卡;flannel网络作为attachment网络,走eth1网卡

主机eth0eth1
node1192.168.5.79192.168.10.11
node2192.168.5.126192.168.10.12
node3192.168.5.27192.168.10.13
每个节点使用eth0作为默认路由
[root@node1 ~]# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.5.1     0.0.0.0         UG    0      0        0 eth0
10.233.90.0     0.0.0.0         255.255.255.0   U     0      0        0 *
10.233.90.1     0.0.0.0         255.255.255.255 UH    0      0        0 cali41f400bfcca
10.233.92.0     192.168.5.27    255.255.255.0   UG    0      0        0 tunl0
10.233.96.0     192.168.5.126   255.255.255.0   UG    0      0        0 tunl0
169.254.169.254 192.168.10.2    255.255.255.255 UGH   0      0        0 eth1
192.168.5.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

主机网络拓扑如下:
在这里插入图片描述

五、flannel部署

  • 下载yaml文件
在主机运行wget下载flannel的yaml 文件
[root@node1 ~]# wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
  • 修改启动参数
1:此次是calico和flannel网络分离使用不同的网卡,所以要修改flannel网络使用的网卡为eth1
编辑flannel.yaml文件,添加如下内容
     containers:
      - name: kube-flannel
        image: docker.io/flannel/flannel:v0.22.3
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth1                    ####设置使用网卡为eth1

#######################################3
2:修改网络,避免和现有的calico以及物理网络冲突
  net-conf.json: |
    {
      "Network": "10.233.0.0/16",  
      "Backend": {
        "Type": "vxlan"   ###网络模式为vxlan
      }
    }
  • 部署flannel
1:部署flannel
[root@node1 ~]# kubectl apply -f  flannel.yaml 
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[root@node1 ~]# 

#################################
2:查看pod启动状态
[root@node1 ~]# kubectl get po -A -o wide   | grep flannel 
kube-flannel           kube-flannel-ds-6tkzg                        1/1     Running   0              3m39s   192.168.5.126   node2   <none>           <none>
kube-flannel           kube-flannel-ds-72ccp                        1/1     Running   0              5m20s   192.168.5.79    node1   <none>           <none>
kube-flannel           kube-flannel-ds-gvhlc                        1/1     Running   0              3m47s   192.168.5.27    node3   <none>           <none>
[root@node1 ~]# 


###########################
3:查看flannel的启动日志
[root@node1 ~]# kubectl logs kube-flannel-ds-6tkzg  -n kube-flannel
Defaulted container "kube-flannel" out of: kube-flannel, install-cni-plugin (init), install-cni (init)
I1102 03:07:31.013498       1 main.go:212] CLI flags config: {etcdEndpoints:http://127.0.0.1:4001,http://127.0.0.1:2379 etcdPrefix:/coreos.com/network etcdKeyfile: etcdCertfile: etcdCAFile: etcdUsername: etcdPassword: version:false kubeSubnetMgr:true kubeApiUrl: kubeAnnotationPrefix:flannel.alpha.coreos.com kubeConfigFile: iface:[eth1] ifaceRegex:[] ipMasq:true ifaceCanReach: subnetFile:/run/flannel/subnet.env publicIP: publicIPv6: subnetLeaseRenewMargin:60 healthzIP:0.0.0.0 healthzPort:0 iptablesResyncSeconds:5 iptablesForwardRules:true netConfPath:/etc/kube-flannel/net-conf.json setNodeNetworkUnavailable:true useMultiClusterCidr:false}
W1102 03:07:31.013748       1 client_config.go:617] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
I1102 03:07:31.133998       1 kube.go:145] Waiting 10m0s for node controller to sync
I1102 03:07:31.134230       1 kube.go:490] Starting kube subnet manager
I1102 03:07:31.145860       1 kube.go:511] Creating the node lease for IPv4. This is the n.Spec.PodCIDRs: [10.233.64.0/24]
I1102 03:07:31.146023       1 kube.go:511] Creating the node lease for IPv4. This is the n.Spec.PodCIDRs: [10.233.66.0/24]
I1102 03:07:32.134217       1 kube.go:152] Node controller sync successful
I1102 03:07:32.134272       1 main.go:232] Created subnet manager: Kubernetes Subnet Manager - node2
I1102 03:07:32.134290       1 main.go:235] Installing signal handlers
I1102 03:07:32.134579       1 main.go:543] Found network config - Backend type: vxlan
I1102 03:07:32.135308       1 match.go:259] Using interface with name eth1 and address 192.168.10.12
I1102 03:07:32.135345       1 match.go:281] Defaulting external address to interface address (192.168.10.12)
I1102 03:07:32.135446       1 vxlan.go:141] VXLAN config: VNI=1 Port=0 GBP=false Learning=false DirectRouting=false
W1102 03:07:32.178714       1 main.go:596] no subnet found for key: FLANNEL_SUBNET in file: /run/flannel/subnet.env
I1102 03:07:32.178731       1 main.go:482] Current network or subnet (10.233.0.0/16, 10.233.65.0/24) is not equal to previous one (0.0.0.0/0, 0.0.0.0/0), trying to recycle old iptables rules
I1102 03:07:32.181267       1 kube.go:511] Creating the node lease for IPv4. This is the n.Spec.PodCIDRs: [10.233.65.0/24]
I1102 03:07:32.229373       1 main.go:357] Setting up masking rules
I1102 03:07:32.232287       1 main.go:408] Changing default FORWARD chain policy to ACCEPT
I1102 03:07:32.234353       1 iptables.go:290] generated 7 rules
I1102 03:07:32.236378       1 main.go:436] Wrote subnet file to /run/flannel/subnet.env
I1102 03:07:32.236397       1 main.go:440] Running backend.
I1102 03:07:32.236791       1 iptables.go:290] generated 3 rules
I1102 03:07:32.236913       1 vxlan_network.go:65] watching for new subnet leases


###########################
4:确认各个节点flannel插件以及网络正常
[root@node1 ~]# ll /opt/cni/bin/  | grep flannel
-rwxr-xr-x 1 root root  2414517 Nov  2 11:03 flannel  ###会在每个节点生成flannel的二进制文件

[root@node1 ~]# cat /var/run/flannel/subnet.env   ###每个节点可用网络的CIDR
FLANNEL_NETWORK=10.233.0.0/16
FLANNEL_SUBNET=10.233.64.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
[root@node1 ~]# 

[root@node1 ~]# ip  a    ###在每个节点多了一个flannel.1的网桥
49: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether d2:7e:4a:31:fe:e9 brd ff:ff:ff:ff:ff:ff
    inet 10.233.64.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::d07e:4aff:fe31:fee9/64 scope link 
       valid_lft forever preferred_lft forever

#############################################
5:创建NetworkAttachmentDefinition
编辑yaml文件内容如下:
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: flannel
spec:
  config: '{
      "cniVersion": "0.3.0",
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": false	#这里要设为false,否则flannel会在容器里面添加默认路由,走flannel生成的net1网卡;因为calico使用了默认网卡eth0,所以容器里面的默认路由也要走calico生成的容器网卡
      }
    }'
    
[root@node1 ~]# kubectl apply -f  flannel-nad.yaml
networkattachmentdefinition.k8s.cni.cncf.io/flannel created
[root@node1 ~]#
[root@node1 ~]# kubectl get Network-Attachment-Definition -A
NAMESPACE   NAME      AGE
default     flannel   27s

六、修改calico网络使用网卡

因为环境在最初之前已经部署了calico,是按照calico网络默认方式选择的可用的ip地址,因为这次要测试流量分离所以最好要修改下。

calico选择ip的方式有两种
1:first-found:第一个接口的第一个有效IP地址,会排除docker网络,localhost。我们环境中有两个网卡,所以要选择一个有效的的网卡
2:can-reach=DESTINATION:可以理解为calico会从部署节点路由中获取到达目的ip或者域名的源ip地址

我们检查下目前calico使用的是哪种模式如下:

[root@node1 ~]# kubectl get  ds -n kube-system    | grep calico 
calico-node      3         3         3       3            3           kubernetes.io/os=linux   207d
[root@node1 ~]# 

###查看calico daemonset中IP_AUTODETECTION_METHOD 配置
[root@node1 ~]# kubectl get  ds/calico-node -n kube-system  -o yaml

    - name: IP_AUTODETECTION_METHOD
          value: can-reach=$(NODEIP)  ###可以看到使用是can-reach方式,将本机eth0的ip作为流量网卡使用

####进入pod查看环境变量,如下:
[root@node1 ~]# kubectl exec -it calico-node-htq5b -nkube-system bash
[root@node1 /]# env  | grep IP_AUTODETECTION_METHOD
IP_AUTODETECTION_METHOD=can-reach=192.168.5.79    ###可以看到是本机eth0的ip
[root@node1 /]# 

修改calico使用指定网卡eth0

有以下两种方式
1:命令行执行替换变量
[root@node1 ~]# kubectl set env daemonset/calico-node  -n kube-system IP_AUTODETECTION_METHOD=interface=eth0
daemonset.apps/calico-node env updated

####修改完之后,pod自动重启如下:
[root@node1 ~]# kubectl get  pod  -n kube-system    | grep calico 
calico-kube-controllers-75c594996d-x49mw   1/1     Running   5 (13d ago)    207d
calico-node-749ll                          1/1     Running   0              12s
calico-node-hbz99                          1/1     Running   0              33s
calico-node-lgpcj                          1/1     Running   0              43s


##############################################
2:编辑daemonset ,如下:
[root@node1 ~]# kubectl edit daemonset/calico-node  -n kube-system

        - name: IP_AUTODETECTION_METHOD
          value: interface=eth0   ###修改为eth0 ,效果和上面一样,pod会自动重启
          

###############################################
3:进入pod,查看是否生效
[root@node1 ~]# kubectl exec -it calico-node-749ll -nkube-system bash
[root@node3 /]# env  | grep IP_AUTODETECTION_METHOD
IP_AUTODETECTION_METHOD=interface=eth0   ###变量已经生效
[root@node3 /]# 
[root@node3 /]# 

七、启动pod测试

1:编辑pod yaml,如下:
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx                                                                                                                                                              
  annotations:
    k8s.v1.cni.cncf.io/networks: flannel
spec:
  containers:
  - name: nginx
    image: docker.io/library/nginx:latest
    imagePullPolicy: IfNotPresent

######################################################
2:启动pod,查看状态
[root@node1 ~]# kubectl apply -f pod.yaml 
pod/nginx created

[root@node1 ~]# kubectl get po -o wide  ###默认显示的还是calico的网络
NAME                                      READY   STATUS    RESTARTS       AGE    IP             NODE    NOMINATED NODE   READINESS GATES
nginx                                     1/1     Running   0              8s     172.16.28.2    node3   <none>           <none>


######################################################
3:此pod位于node3节点,ssh到node3,进入pod命名空间查看ip以及路由问题
[root@node3 ~]# crictl ps | grep nginx
fcfbae2ace1b9       12766a6745eea       4 minutes ago       Running             nginx                       0                   0365e4a0f167f       nginx
[root@node3 ~]# crictl inspect fcfbae2ace1b9  | grep -i pid
    "pid": 23237,
            "pid": 1
            "type": "pid"
[root@node3 ~]# nsenter -t 23237 -n bash 
[root@node3 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if79: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default 
    link/ether ea:25:5b:31:e1:69 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.16.28.2/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::e825:5bff:fe31:e169/64 scope link 
       valid_lft forever preferred_lft forever
6: net1@if81: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether ea:86:51:86:34:69 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.233.66.2/24 brd 10.233.66.255 scope global net1
       valid_lft forever preferred_lft forever
    inet6 fe80::e886:51ff:fe86:3469/64 scope link 
       valid_lft forever preferred_lft forever

net1就是使用flannel网络获取到的ip地址


################################################################
4:查看容器中的路由
[root@node3 ~]# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         169.254.1.1     0.0.0.0         UG    0      0        0 eth0
10.233.0.0      10.233.66.1     255.255.0.0     UG    0      0        0 net1
10.233.66.0     0.0.0.0         255.255.255.0   U     0      0        0 net1
169.254.1.1     0.0.0.0         255.255.255.255 UH    0      0        0 eth0
[root@node3 ~]# 

以上可以看到默认路由是容器内部的eth0 ,走的物理机网卡的eth0

测试网络是否可通,在容器的宿主机node3上测试两个ip地址都可以通
在这里插入图片描述
从其他物理节点测试,calico网络172段的可通,flannel的不可达,因为pod默认路由走的eth0.
在这里插入图片描述

在创建一个pod,测试不同主机之间的pod能否互通

[root@node1 ~]# kubectl get po -o wide   ###新建nginx2,位于node2节点
NAME                                      READY   STATUS    RESTARTS       AGE     IP             NODE    NOMINATED NODE   READINESS GATES
nginx                                     1/1     Running   0              32m     172.16.28.2    node3   <none>           <none>
nginx2                                    1/1     Running   0              3m45s   172.16.44.1    node2   <none>           <none>


进入nginx2容器,ping nginx容器ip,如下:
[root@node2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if85: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default 
    link/ether 56:9b:fe:a4:da:5a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.16.44.1/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::549b:feff:fea4:da5a/64 scope link 
       valid_lft forever preferred_lft forever
6: net1@if87: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether a6:41:e5:f8:b1:25 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.233.65.2/24 brd 10.233.65.255 scope global net1
       valid_lft forever preferred_lft forever
    inet6 fe80::a441:e5ff:fef8:b125/64 scope link 
       valid_lft forever preferred_lft forever


[root@node2 ~]# ping 10.233.65.2   ##测试容器本身ip
PING 10.233.65.2 (10.233.65.2) 56(84) bytes of data.
64 bytes from 10.233.65.2: icmp_seq=1 ttl=64 time=0.141 ms
^C
--- 10.233.65.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.141/0.141/0.141/0.000 ms
[root@node2 ~]# ping 10.233.66.2   ###测试node3节点ip,可通
PING 10.233.66.2 (10.233.66.2) 56(84) bytes of data.
64 bytes from 10.233.66.2: icmp_seq=1 ttl=62 time=4.77 ms
64 bytes from 10.233.66.2: icmp_seq=2 ttl=62 time=1.00 ms
^C
--- 10.233.66.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.001/2.889/4.777/1.888 ms

注意:在该环境中,如果使用networkpolicy,是能对容器的eth0显示,并不能显示net1网卡的流量策略,因为flannel本身不支持networkpolicy功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1164562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSAPP BOMB LAB part2

bomb lab part2 phase3 汇编语法 switch 汇编版本 switch 例子: switch 使用 jump table movl 指令 cmpl指令是x86汇编语言中的一个比较指令&#xff0c;用于比较两个操作数的值。cmpl指令的格式如下&#xff1a; cmpl source, destinationsource和destination可以是…

为什么我电脑上C:\Windows\System32\config\regback文件夹是空的,怎么设置才能有备份文件

环境&#xff1a; Win10 专业版 19041 问题描述&#xff1a; 为什么我电脑上C:\Windows\System32\config\regback文件夹是空的&#xff0c;怎么设置才能有备份文件 解决方案&#xff1a; 微软说从 Windows 10 版本 1803 开始&#xff0c;系统注册表不再备份到 RegBack 文件…

第二章 线性表【数据结构与算法】【精致版】

第二章 线性表【数据结构与算法】【精致版】 前言版权第二章 线性表2.1 应用实例应用实例一 约瑟夫环问题(Josephus problem)应用实例二 一元多项式运算器 2.2 线性表的概念及运算2.2.1线性表的逻辑结构2.2.2 线性表的运算 2.3 线性表的顺序存储2.3.1 顺序表2.3.2 顺序表的基本…

网络安全进阶学习第二十一课——XXE

文章目录 一、XXE简介二、XXE原理三、XXE危害四、XXE如何寻找五、XXE限制条件六、XXE分类七、XXE利用1、读取任意文件1.1、有回显1.2、没有回显 2、命令执行&#xff08;情况相对较少见&#xff09;3、内网探测/SSRF4、拒绝服务攻击(DDoS)4.1、内部实体4.2、参数实体 八、绕过基…

制造企业如何三步实现进销存管理?

制造企业如何三步实现进销存管理&#xff1f; 一、什么是进销存软件&#xff1f; 进销存软件是一种针对制造业企业设计的管理软件系统&#xff0c;旨在协调和优化企业的生产、采购、销售以及库存管理等方面的活动。该系统的主要目标是提高企业的生产效率、降低库存成本、优化…

C++二分查找算法的应用:俄罗斯套娃信封问题

本文涉及的基础知识点 二分查找 题目 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一个信封里&#xff0c;如同俄罗…

npm ERR! code ELIFECYCLE

问题&#xff1a; 一个老项目&#xff0c;现在想运行下&#xff0c;打不开了 npm install 也出错 尝试1 、使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install 还是不行 尝试2、 package.json 文件&#xff0c;去掉 那个插件 chorm…

VS Code 开发 Spring Boot 类型的项目

在VS Code中开发Spring Boot的项目&#xff0c; 可以导入如下的扩展&#xff1a; Spring Boot ToolsSpring InitializrSpring Boot Dashboard 比较建议的方式是安装Spring Boot Extension Pack&#xff0c; 这里面就包含了上面的扩展。 安装方式就是在扩展查找 “Spring Boot…

​​​​​​​2022年上半年 软件设计师 上午试卷(33-68)

35 C 36 D 该题在2013年下半年考过类似的题目&#xff0c;从图中可见&#xff0c;页内地址的长度为12位&#xff0c;2124096&#xff0c;即4K&#xff0c;页号长度为21-12110&#xff0c;2101024&#xff0c;段号长度为31-22110&#xff0c;2101024。故正确答案为D。 37&#x…

传感器类总结(一)MPU9250 1原理介绍

1简介 MPU9250是一款9轴运动跟踪装置&#xff0c;在它3x3x1mm的封装中集成了3轴陀螺仪&#xff0c;3轴加速度计&#xff0c;3轴磁力计以及运动处理器&#xff08;DMP&#xff09;并且兼容 MPU6515。通过IIC&#xff0c;可以直接输出9轴的全部数据。因此它也是四轴姿态结算的基…

【LeetCode刷题-链表】--203.移除链表元素

203.移除链表元素 方法&#xff1a;定义一个节点指向头节点head&#xff0c;避免头结点单独操作 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …

哪个牌子的骨传导蓝牙耳机好?盘点市面上口碑最好的五款骨传导耳机

随着技术的发展&#xff0c;运动蓝牙耳机这个类别已经进化到了骨传导的形式&#xff0c;也受到了广大运动爱好者的一致好评&#xff0c;在日常运动中&#xff0c;也经常会看到佩戴骨传导耳机的消费者&#xff0c;但普通的骨传导耳机却表现并不是很好&#xff0c;所以在选购骨传…

修改Typora默认微软雅黑字体

修改Typora字体 写在前面 我最近在折腾windows电脑&#xff0c;从macos转像windows不容易啊&#xff0c;因为键盘快捷键经常弄错&#xff0c;这篇文章就是修改Typora中字体显示的问题。 正文内容 我发现在windows中&#xff0c;字体非常的难看&#xff0c;微软雅黑也太丑了…

Zeebe 微服务编排引擎 入门

相关阅读: linux 安装 zeebe: Zeebe学习(一)——Linux下安装zeebe以及快速入门_互联网集市 Zeebe是一个用于微服务编排的工作流引擎。 这篇文章将帮助你确切地了解什么是Zeebe以及它如何可能与你相关。我们将简要介绍Zeebe以及它所解决的问题,然后再进行更详细的介绍。…

求解一个整数中含多少个1

1.问题描述&#xff1a;给定一个整数&#xff0c;统计其对应的二进制中含有1的个数。比如8(0000 1000),对应的二进制数中&#xff0c;只含有一个1. 2.设计思路&#xff1a;对x取余&#xff1a;zx%2。如果z&#xff01;0&#xff0c;说明x的末尾不是为1.对于一个二进制x4x3x2x1…

JAVA虚拟机-第2章 Java自动内存管理-内存区域与内存溢出异常以及对象在Java堆中如何被new、管理和访问(1)

在java中&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要为每一个new操作去写配对的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题。但正是因为Java程序员把控制内存的权力交给了Java虚拟机&#xff0c;一旦出现内存泄漏和溢出方面的问题&a…

pikache靶场通关——XXE

文章目录 前言一、有返回显示XXE1、在输入框输入随机数据&#xff0c;抓包2、在BP数据包和靶场中各尝试使用正确的XML格式重新输入3、使用BP进行URL编码&#xff0c;利用XXE来读取系统文件 二、无回显XXE1、模拟使用的机器2、修改代码实现靶场无回显2.1、修改靶场代码&#xff…

运维常识——网络

内网&#xff0c;公网IP 内网IP为专网IP 因为网络资源&#xff08;IP地址不够&#xff0c;所以引出来了内网IP和IPv6&#xff09; 内网IP和公网IP之分是为了减缓IP地址不够使用的情况 一般设置代理服务器 设置两张网卡 一张对外一张对内 内部主机将数据转发到内网卡&#…

TSINGSEE智慧安防:AI人员入侵检测算法的工作原理及应用场景概述

人员入侵检测算法基于视频分析技术&#xff0c;自动对视频画面进行分析识别&#xff0c;可以对危险区的人员闯入、靠近等行为进行实时进行检测并预警&#xff0c;无需人工干预&#xff0c;协助管理者对场所的安全问题进行监管&#xff0c;可以广泛运用在学校、园区、工地、车站…

SDK是什么

SDK 是“Software Development Kit”&#xff08;软件开发工具包&#xff09;的缩写&#xff0c;它是一组用于开发特定软件应用、硬件平台、计算机系统或操作系统的开发工具的集合。SDK 通常包括一组开发工具、库、文档和示例代码&#xff0c;以帮助开发者更快地开发和部署应用…