underlay
和overlay
# 如果安装了其他网络插件,先卸载掉,具体删除方法删除daemonset和cni配置文件
# 然后安装kube-ovn
# 第一步,给所有节点打标签
kubectl label node k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02 k8s-node03 k8skube-ovn/role=master
# k8s版本低于1.6需要将节点ip在ovn-ha.yaml文件中进行修改
# 将以下标签添加到将托管 OVN 数据库和 OVN 控制平面的节点:
kubectl label node <Node on which to deploy OVN DB> kube-ovn/role=master
# 安装 Kube-OVN 相关的 CRD:
kubectl apply -f https://raw.githubusercontent.com/alauda/kube-ovn/release-1.8/yamls/crd.yaml
# 获取 ovn.yaml 并将$addresses文件替换为将托管 OVN 数据库和 OVN 控制平面的节点的 IP 地址:
curl -O https://raw.githubusercontent.com/alauda/kube-ovn/release-1.8/yamls/ovn.yaml
sed -i 's/\$addresses/<Node IP>/g' ovn.yml
# 安装原生 OVS 和 OVN 组件:
kubectl apply -f ovn.yaml
# 安装 Kube-OVN 控制器和 CNI 插件:
kubectl apply -f https://raw.githubusercontent.com/alauda/kube-ovn/release-1.8/yamls/kube-ovn.yaml
Logical Switch
(虚拟交换机),提供一组IP的相关管理功能subnet
可以和Namespace
绑定,提供Namespace级别的网络控制(CIDR, Gateway, NAT, ACL)
CIDR
英文Classless InterDomain Routing,意思是无类别域际路由选择
ovn-default
# 可以看到一个join,一个ovn-default子网,可以看到有哪些namespace使用子网,以及可以用的ip还有多少
kubectl get subnet
kubectl get ip
创建子网的时候默认是分布式的网关
每个节点作为当前节点上pod访问外网的物理网关
通过ovn的策略路由将出网流量经本机ovn0
网卡进入宿主机
通过宿主机的路由策略转发数据包
推荐使用集中式网关
特定节点作为当前子网pod出网的物理网关
需要在子网中中配置nodeName,指定出网节点
可配置多个出网节点,支持主备模式高可用
apiversion kubeovn.io/v1
kind: Subnet
metadata:
name: subnet1
spec:
protocol: IPv4
# 是否为默认的subnet
default: false
cidrBlock: 10.5.0.0/16
# 不会被分配的IP
excludeIps:
- 10.5.0.1..10.5.0.10
- 10.5.0.11
# 网关,不设置也可以,会默认以第一个ip为网关
gateway: 10.5.0.1
# 哪一个namespace使用这个subnet
namespace:
- wutong
# 如果是集中式网关类型,就需要指定一个节点作为出网节点,可以配置多个,分布式网关类型就不需要配置
gatewayNode: ""
# 网关类型
gatewayType: distributed
natOutgoing: true
private: false
# 查看创建的子网信息
kubectl ko nbctl list logical_switch
# 查看虚拟路由器的路由规则,如果是src-ip就是SNAT,如果是dst-ip,就是DNAT
# 比如10.5.0.12的下一条是100.64.0.4,使用的是SNAT,就是源地址转换
kubectl ko nbctl lr-route-list ovn-cluster
IPv4 Routes
192.168.16.44 100.64.0.2 dst-ip
10.5.0.12 100.64.0.4 src-ip
controller-manager
报错1 event.go:291] "Event occurred" object="worker-2" kind="Node" apiVersion="v1" type="Normal" reason="CIDRNotAvailable" message="Node worker-2 status is now: CIDRNotAvailable"
# 修改controller-manager 的yaml文件,因为kube-ovn是统一分配pod ip的,会有多个子网,不需要指定pod的IP网段,禁用参数
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
--allocate-node-cidrs false