中文 | English
hostnic-cni 是一个 Container Network Interface 插件。 本插件会直接调用 IaaS 的接口去创建网卡,并将容器的内部的接口连接到网卡上,不同Node上的Pod能够借助IaaS的SDN进行通讯。此插件的优点有:
hostnic
需要有在云平台上操作网络的权限,所以首先需要增加 IaaS 的 sdk 配置文件,并将其存储中kube-system中的qcsecret
中。
cat >config.yaml <<EOF
qy_access_key_id: "Your access key id"
qy_secret_access_key: "Your secret access key"
# your instance zone
zone: "pek3a"
EOF
## 创建Secret
kubectl create secret generic qcsecret --from-file=./config.yaml -n kube-system
access_key 以及 secret_access_key 可以登录青云控制台,在 API 秘钥菜单下申请。 请参考https://docs.qingcloud.com/product/api/common/overview.html。默认是配置文件指向青云公网api server,如果是私有云,请按照下方示例配置更多的参数:
qy_access_key_id: 'ACCESS_KEY_ID'
qy_secret_access_key: 'SECRET_ACCESS_KEY'
host: 'api.xxxxx.com'
port: 443
protocol: 'https'
uri: '/iaas'
connection_retries: 3
创建hostnic
配置对应的yaml文件
cat >hostnic-cm.yaml <<EOF
apiVersion: v1
data:
hostnic: |
{
"pool":{
"maxNic":60
},
"server":{
"networkPolicy": "calico"
}
}
hostnic-cni: |
{
"cniVersion": "0.3.0",
"name": "hostnic",
"type": "hostnic",
"serviceCIDR" : "10.233.0.0/18",
"hairpin": false,
"natMark": "0x10000"
}
kind: ConfigMap
metadata:
name: hostnic-cfg-cm
namespace: kube-system
EOF
## 创建configmap给hostnic-node使用
kubectl apply -f hostnic-cm.yaml
cat >clusterconfig-cm.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: clusterconfig
namespace: kube-system
data:
qingcloud.yaml: |
zone: pek3a
clusterID: cl-ns8bix0q
userID: usr-hRAmdSn6
securityGroup: sg-mcun6ybb
EOF
## 创建configmap给hostnic-controller使用
## 对于非QKE集群,须要去掉clusterID和securityGroup配置(它们用于QKE安全组对hostnic私有网络的放行)
kubectl apply -f clusterconfig-cm.yaml
kubectl apply -f https://raw.githubusercontent.com/cumirror/hostnic-cni/master/deploy/hostnic.yaml
hostnic
会使用 IaaS 的 vxnet 进行 IPAM ,所以需要创建 vxnetpool 资源
cat >vxnetpool.yaml <<EOF
apiVersion: network.qingcloud.com/v1alpha1
kind: VxNetPool
metadata:
name: v-pool
spec:
vxnets:
- name: vxnet-xxxxxxxx
- name: vxnet-yyyyyyyy
blockSize: 27
EOF
## 创建vxnetpool
kubectl apply -f vxnetpool.yaml
创建vxnetpool后,通过 IPAM 配置把 namespace 映射到某一个 subnet ,从而控制 namespace 中 pod 的 IP 分配
cat >hostnic-ipam-config.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: hostnic-ipam-config
namespace: kube-system
data:
subnet-auto-assign: "off"
ipam: |
{
"Default": ["vxnet-xxxxxxxx"],
"test": ["4100-172-16-3-0-26", "4100-172-16-3-128-26"],
"abc": ["4100-172-16-3-64-26", "4100-172-16-3-192-26"]
}
EOF
## 创建 IPAM 配置
kubectl apply -f hostnic-ipam-config.yaml
通过 subnet-auto-assign 可以开启或关闭自动映射功能
- 开启后,hostnic-controller 自动分配 ipam 中 namespace 与 subnet 的映射关系;
- 关闭后,可以手动指定 ipam 中 namespace 与 subnet 的映射关系;
- 手动指定时,可以设置 Default,如果没有找到映射关系,则由 Default 中的 vxnet 进行 IPAM 分配。
kubectl apply -f https://raw.githubusercontent.com/cumirror/hostnic-cni/master/policy/calico.yaml
由于hostnic使用leveldb保存ip地址信息, 如果集群重装那么你需要执行rm -fr /var/lib/hostnic/*
删除数据库用于清除信息