kubernetes集群pod双网卡配置

kubernetes集群中创建pod,默认只能使用一张网卡,但是在某些情况下(实现容器路由功能)单网卡不能满足实验需求。multus-cni提供了将多个接口添加到Pod的功能,这允许POD通过不同的接口连接到多个网络,并且每个接口都将使用其自己的CNI插件,即在pod上建立不同网段的多张网卡,原理图如下:

kubernetes集群pod双网卡配置_第1张图片

1.安装go环境,官方下载地址为https://golang.org/dl/(此网址需要),选择适合自己系统的go包(master和node):

wget https://golang.org/dl/go1.15.2.linux-amd64.tar.gz

tar -zvxf https://golang.org/dl/go1.15.2.linux-amd64.tar.gz -C /usr/local

修改~/.bashrc文件,在末尾添加以下命令并保存:

export GOPATH=/root/go
export PATH=$PATH:$GOPATH:/usr/local/go/bin

执行以下命令,加载环境变量到内存:

source ~/.bashrc

2.安装multus(master和node)

git clone https://github.com/intel/multus-cni.git && cd multus-cni
./build

此时multus-cni文件夹下出现了一个名为bin的文件夹,进入该文件夹,将其中的名为multus的二进制文件复制到/opt/cni/bin中:

cp multus /opt/cni/bin

3.在/etc/cni/net.d/中设置conf文件(master和node)

mkdir -p /etc/cni/net.d

cat >/etc/cni/net.d/30-multus.conf <

4.创建ServiceAccount,ClusterRole及其绑定(master)

# Execute following commands at Kubernetes master

 cat <

5.设置kubeconfig文件(master):

# Execute following command at Kubernetes master

mkdir -p /etc/cni/net.d/multus.d
SERVICEACCOUNT_CA=$(kubectl get secrets -n=kube-system -o json | jq -r '.items[]|select(.metadata.annotations."kubernetes.io/service-account.name"=="multus")| .data."ca.crt"')
SERVICEACCOUNT_TOKEN=$(kubectl get secrets -n=kube-system -o json | jq -r '.items[]|select(.metadata.annotations."kubernetes.io/service-account.name"=="multus")| .data.token' | base64 -d )
KUBERNETES_SERVICE_PROTO=$(kubectl get all -o json | jq -r .items[0].spec.ports[0].name)
KUBERNETES_SERVICE_HOST=$(kubectl get all -o json | jq -r .items[0].spec.clusterIP)
KUBERNETES_SERVICE_PORT=$(kubectl get all -o json | jq -r .items[0].spec.ports[0].port)

cat > /etc/cni/net.d/multus.d/multus.kubeconfig <

复制/etc/cni/net.d/multus.d/multus.kubeconfig文件到其他node节点中,其他节点需要创建名为multus.d的文件夹以及名为multus.kubeconfig的文件。

6.执行以下命令,在Kubernetes中创建CRD定义(master):

# Execute following command at Kubernetes master

$ cat <

7.创建第二层网络(master)

# Execute following command at Kubernetes master

cat <

8.建立pod测试双网卡(master):

# Execute following command at Kubernetes master

cat <

进入容器内部,查看网络:

kubectl exec -it test -c test /bin/bash

ip a

可以看到名为eth0(10.244.1.x)和eth1(10.10.1.x)的两张网卡。

你可能感兴趣的:(kubernetes)