使用软件说明
- vCenter 6.7 U1b (Build 11727113)
- ESX 6.7 U2 (Build 13006603)
- NSX-T 2.4.1 (Build 13716579)
- NSX Container Plugin 2.4.1 (Build 13515827)
- CentOS 7.6
- Docker CE 18.09.6
- Kubernetes 1.13.5
- Open vSwitch 2.10.2.13185890
K8S+NSX-T Architecture
在原始K8S集群上,增加了四个部分的组件:NCP、NSX CNI Plugin、NSX Node Agent和Open vSwitch。NSX-T DataPlane 通过 hypervisor 层⾯面实现(⽽不是扩展数据平⾯并覆盖网络结构直到K8S节点VM级别),VLAN仅在K8S工作节点vNIC和NVDS逻辑交换机之间使用,使用VLAN的原因是能够将K8S Pod之间隔离,从而保护通信,通过这种方式,可以为每个Pod实现NSX分布式防⽕墙,并且每个Pod可以连到不同的网络段(NSX-T Logical Switch/Segment)。
NSX Container Plugin(NCP)
NCP部署在K8S集群的各个节点上(Master和Node都需要部署),它的管理平面组件实现 K8S API Server(Master)和NSX-T API之间管理功能。
在etcd中一旦发⽣任何改变现有资源则建⽴一个新的资源(比如Namespace,Pod,Network Policy,Service),Kubernetes会通知NCP,NCP发出API调⽤ NSX-T Manager API 来实现所需的逻辑网络结构(创建容器器接⼝CIF,在Logical Switch连接一个Logical Port ;创建 Logical Switch ;Router; NAT ;Load Balance;分布式防⽕墙规则等等)。
NCP部署需要NCP Container Images和 deployment yaml文件(NCP-deployment.yaml)
Open vSwitch(OVS)
NSX-T为K8S POD提供网络过程中会使用到Open vSwitch (OVS),⽽不是Linux Bridge,它提供了两个主要功能:
- 为K8S Pod提供容器网络。
- 东西向 Load Balancing(又称服务类型:集群IP)
NSX Node Agent
NSX Node Agent也是有一个Container Image,也是以一个Pod形式运行在K8S集群的Worker Node上,它被部署为K8S"DaemonSet",DaemonSet确保所有或则特定的节点运行Pod的副本,当一个Node加入到集群时,该节点将把相应的Pod添加给自己。
NSX Node Agent的Pod有两个容器:NSX kube proxy 和 NSX Node Agent,具体解释如下:
在K8S中, 原⽣的Kube Proxy提供了基于IPTables(或则IPVS)的分布式东西向 Load Balance(K8S 的Service Type: Cluster IP),NSX kube Proxy利用 OpenSwitch(OVS)Conntrack NAT的特性,在OVS上提供Flow rules ,以提供东西向分布式Load Balance; NSX Kube Proxy 在K8S API上为使用类型 Cluster IP 的新K8S服务创建一个Watch,一旦使用Cluster IP创建了一个新的K8S服务,那么NSX Kube Proxy 就会在OVS上提供各自 NAT转发规则和服务器器组。
NSX-T 利用K8S Nodes上的Open Switch(OVS),NSX Node Agent 管理OVS的 uplink和Downlink的配置细节;连接K8s pods和OVS,它通过与NSX CNI Plugin和 NSX-T 控制平面通信来实现这一点,当⼀个Pod在K8S Node上线,NSX Node Agent 负责创建一个OVS Port和连接到Pod,OVS uplink Port 作为Pod和正确的VLAN ID 沟通。
NSX CNI Plugin
每个K8S节点都需要部署NSX CNI Plugin模块。
名为”kubelet"的K8S组件,运行在每个K8S节点上作为K8S Agent;它接受通过K8S API提供的一组 PodSpec(使用yaml文件部署应用),然后它向NSX CNI Plugin发送一个请求,使得各个Pod的网络可用。
实验拓扑
参数设置
Name | IP Addr | 域名 |
vCenter | 192.168.110.22 | vcsa-01a |
DNS Server | 192.168.110.10 | |
NSX-T Manager | 192.168.1.42 | nsxmgr-01a |
NSX-T edge 1 | 192.168.110.91 | nsxedge-1 |
NSX-T edge 2 | 192.168.110.92 | nsxedge-2 |
K8S-Pods-IP-Block | 172.106.0.0/16 | |
K8S-Load_blancer-Pool | 10.110.0.10 - 10.110.254.200/16 | |
K8S-NAT-Pool | 10.120.10.10 - 10.120.254.200/16 | |
ls-k8s-mgmt GW | 10.100.10.1/24 | |
k8s-master | 10.100.10.10 | k8s-master |
k8s-node1 | 10.100.10.11 | k8s-node1 |
k8s-node2 | 10.100.10.12 | k8s-node2 |
假设192.168.和10.段为全局可路由网段,172.段为私有网段。外部网络需要配置10.段的静态路由(下一跳T0出口),T0路由器使用默认网关指向物理网络。
部署安装准备
部署Node准备
- NTP设定精确同步
配置域时钟同步
- 双网卡配置、DNS解析或Hosts文件设置
配置好ens192,ens224将在后面配置
vim /etc/sysconfig/network-scripts/ifcfg-ens192
ONBOOT=yes
IPADDR=10.100.10.11
PREFIX=24
GATEWAY=10.100.10.1
DNS1=192.168.110.10
DOMAIN=corp.local
- 关闭iptables或firewalld服务,并确保在引导时禁止启动
[root@k8s-node1 ~]# systemctl stop firewalld
[root@k8s-node1 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multiuser.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
- 禁用SELinux
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- 禁用swap