1、利用NSX-T优化Kubernets网络目录1NSX-T 架构概览2Kubernetes 架构概览3NSX-T 和 Kubernetes的集成4总结2NSX-T 架构概览NSX愿景:NSX 无处不在4统一管理任意多样化终端的网络及安全服务连接分支机构分支机构公有云公有云新应用框架新应用框架虚拟桌面虚拟桌面数据中心数据中心自动化自动化IT及业务敏捷化部署安全安全微分段零信任应用持续性应用持续性任意数据中心位置New app frameworksOn-premBARE METALCloudvCloud AirNetworkTransport NodesNSX ManagerNSX 控制器NSX-T
2、 架构5 NSX 架构和组件云消云消费费 自服务门户自服务门户 OpenStack,K8s,客户自建云客户自建云数据平面数据平面 高性能控制平面高性能控制平面 基于横向扩展的分布式转发模型基于横向扩展的分布式转发模型Management Plane(MP)Node 虚机形式虚机形式 并发配置门户并发配置门户 REST API接口接口 图形管理界面图形管理界面Central Control Plane(CCP)Nodes-虚机形式虚机形式 通过控制平面协议和数据平面通信通过控制平面协议和数据平面通信 控制平面和数据平面分离控制平面和数据平面分离ESXi(+kernel modules)控制平面控
3、制平面管理平面管理平面NSX Edge(L3+Adv Services)物理基物理基础础架构架构HypervisorsL2 Bridge(L2 Overlay-VLAN)KVM(+kernel modules)CCP NodeCCP NodeCCP NodeMP NodeNSX-T 架构6 运维工作流Transport NodeMPALCPTransport NodeMPALCPMPAX配置入口配置被推送到 CCP配置落地 Data Plane7 提升性能和弹性AdminTenants/CMP设计专注于多租户和扩展性新的分布式架构通过DPDK大幅提升性能 p1p2HV TN1vSwitch1T
4、EPOverlay Transport ZoneTEP:Overlay Tunnel End Point(Ip地址)GENEVE 隧道隧道p1p2HV TN1vSwitch2TEP下一代overlay协议 在增加灵活性的提升性能EdgeNodeEdge ClusterEdgeNodeEdgeNodeEdgeNodeKubernetes 概览9Kubernetes 一个开源平台,主要用于跨主机集群的容器应用的部署、弹性扩展、集中运维,提供容器为中心的基础架构.什么是Kubernetes?K8s 集群包括 Master(s)and Nodes K8s Master 组件组件 API Server
5、Scheduler Controller Manager Dashbord K8s Node 组件组件 Kubelet Kube-Proxy Containers Runtime(Docker or Rocket)10K8s masterK8s masterK8s MasterController ManagerK8s APIServerKey-Value Store dashboardSchedulerK8s nodeK8s nodeK8s nodeK8s nodeK8s Nodeskubeletc runtimeKube-proxyK8s Master(s)Kubernetes 组件11P
6、odpause container(owns the IP stack)10.24.0.0/1610.24.0.2nginxtcp/80mgmttcp/22loggingudp/514A Pod 是单个容器或多个容器组成的组,Pod内容器共享一个IP地址和数据卷Kubernetes Pod12Namespace:fooBase URI:/api/v1/namespaces/fooredis-master Pod:/api/v1/namespaces/foo/pods/redis-masterredis service:/api/v1/namespaces/foo/services/redis-
7、masterNamespace:barBase URI:/api/v1/namespaces/barredis-master Pod:/api/v1/namespaces/bar/pods/redis-masterredis service:/api/v1/namespaces/bar/services/redis-masterNamespaces 是一种为多用户共享集群资源的一种方式可以看作为租户他们是一种提供资源配额,RBAC,网络多租户,名字重复的方式Kubernetes Namespace 东西向负载均衡 南北向负载均衡Redis Slave Podsredis-slave svc10
8、.24.0.5/16172.30.0.24Web 前端PodsEast-West负载均衡通过使用ClusterIP和IPTables的K8s服务来提供Web Front-End(e.g.Apache)PodsWeb Front-End IngressNginx|HAProxy|etc.LB Podshttp:/*可用通过 K8s Ingress功能或者外部第三方负载均衡设备结合NodePort 来实现K8s 负载均衡Node int eth010.240.0.4int cbr010.24.2.1/2410.24.2.210.24.2.310.24.2.4Kubernetes 网络拓扑14 扁平
9、路由拓扑Node int eth010.240.0.3int cbr010.24.1.1/2410.24.1.210.24.1.310.24.1.4net.ipv4.ip_forward=1net.ipv4.ip_forward=1 每个Node相当于一个IP Router负责自己的Pod子网 子网和Node相关联,和租户无关 Node间通信需要配置相关外部物理网络ip route 10.24.1.0/24 10.240.0.3ip route 10.24.2.0/24 10.240.0.4 Kubernetes 网络拓扑15 Node到Node的叠加网络拓扑Node int eth010.2
10、40.0.4int cbr010.24.2.1/2410.24.2.210.24.2.310.24.2.4Node int eth010.240.0.3int cbr010.24.1.1/2410.24.1.210.24.1.310.24.1.4net.ipv4.ip_forward=1net.ipv4.ip_forward=1OverlayKey-Value Store 叠加网络的使用主要是为了避免物理网络配置NSX-T 和Kubernetes的集成 17admink8s-master:$kubectl create namespace foonamespace”foo createdadm
11、ink8s-master:$kubectl create namespace barnamespace”bar createdadmink8s-master:$kubectl run nginx-foo-image=nginx-n foodeployment nginx-foo createdadmink8s-master:$kubectl run nginx-bar-image=nginx-n bardeployment nginx-bar createdNamespace:fooNSX/K8s topology10.24.0.0/2410.24.1.0/24NAT boundaryK8s
12、nodesK8s MastersNSX-T K8s 集成 Namespaces&Pods18admink8s-master:$vim no-nat-namespace.yamlapiVersion:v1kind:Namespacemetadata:name:no-nat-namespace annotations:ncp/no_snat:true“admink8s-master:$kubectl create f no-nat-namespace.yamlnamespace”no-nat-namespace createdadmink8s-master:$kubectl run nginx-n
13、o-nat-image=nginx n no-nat-namespace deployment nginx-k8s createdNamespace:no-nat-namespaceNSX/K8s topology114.4.10.0/26K8s nodesK8s MastersNSX-T K8s 集成 基于路由的NamespacesNSX-T K8s 集成 Pods的微分段#NET1522BU CONFIDENTIAL19 方式1:基于安全规则的预定义标签(Label)admink8s-master:$kubectl label pods nginx-foo-3492604561-nltrf
14、 secgroup=web-n fooPod nginx-nsx-3492604561-nltrf labeledadmink8s-master:$kubectl label pods nginx-bar-2789337611-z09x2 secgroup=db-n barpod nginx-k8s-2789337611-z09x2 labeledadmink8s-master:$kubectl get pods -all-namespaces-Lsecgroup NAMESPACE NAME READY STATUS RESTARTS AGE SECGROUPk8s nginx-foo-27
15、89337611-z09x2 1/1 Running 0 58m webnsx nginx-bar-3492604561-nltrf 1/1 Running 0 1h dbNamespace:fooNSX/K8s topology10.24.0.0/2410.24.1.0/24NAT boundary在NSX定义Security Groups并配置入/出方向 安全策略每个Security Group 可以被微分段以保护Pods相互访问DBNSX-T K8s 集成 Pods的微分段20 方式2:基于K8s Network Policyadmink8s-master:$vim nsx-demo-p
16、olicy.yamlapiVersion:extensions/v1beta1kind:NetworkPolicymetadata:name:nsx-demo-policyspec:podSelector:matchLabels:app:web ingress:-from:-namespaceSelector:matchLabels:ncp/project:db ports:-port:80 protocol:TCPadmink8s-master:$kubectl create-f nsx-demo-policy.yamlState:在 K8s 1.7发布(Beta on 1.6)能力能力:使
17、用 Network Policy,用户可以定义进出Namespace或者Pod之间的防火墙规则.network policy一个是 Namespace 特性.Namespace:fooNSX/K8s topology10.24.0.0/2410.24.1.0/24NAT boundaryWebLabel:app=web21$kubectl create-f nsx-demo-policy.yaml动态创建安全组基于k8s的Network Policy动态创建安全策略一旦k8s的Network Policy被应用,NSX 就会自动创建源/目的安全组,并应用正确的安全策略NSX-T K8s 集成
18、Pods的微分段 方式2:基于K8s Network PolicyK8s微分段微分段:描述Namespaces之间和Namespaces内部安全分段策略的数据模型叫Network Policies,Kubernetes 1.7发布(1.6 Beta 版)基于基于Kubernetes的安全的安全NSX 可以利用K8s的网络策略定义动态的安全组和安全策略能力受限于 K8s Network Policy 本身的能力K8s Network Policy安全组和安全策略可以在NSX预定义,标签用于指定Pods的成员关系在策略定义时也可以使用基于Ip地址的安全组、出向规则、基于VM的匹配等。基于安全规则的
19、预定义标签基于安全规则的预定义标签The NSX/K8s 的集成,既支持基于预定义标签规则的网络安全又支持基于K8s network policy的网络安全 基于基于NSX/K8s的安全的安全22NSX-T K8s 集成 Pods的微分段23NodeVMNSX CNI PluginOVSPodsNSX KubeProxyK8s masterK8s masterK8s MasterController ManagerK8s APIServerdashboardScheduler K8s 服务通过NSX Kube-Proxy交付 作为一个容器image交付,作为Kubernetes进程运行在Nod
20、es上 NSX Kube-Proxy 取代原生的分布式东西向负载均衡Kube-Proxy 采用OpenVSwitch(OVS)的负载均衡东西向负载均衡一旦一个Ingress Controller 被添加,NSX 将定义相应的SNAT&DNAT 规则24Web Front-End IngressNginx入向负载均衡Podhttp:/*.demo.corp.local10.4.0.0/2410.4.0.67南北向负载均衡NCP 是一个Vmware提供的以容器image交付的软件组件,比如,作为一个K8s Pod运行NCP采用模块化方式,因此可以为不同的CaaS和PaaS系统添加单独的adapte
21、rsK8s/NSX 组件25 NSX Container Plugin(NCP)Namespace 创建工作流创建工作流NCP InfraK8s AdapterNSX Container PluginNSX Manager API ClientNSX ManagerNS:fooNSX/K8s topologyNS:barK8s masteretcdAPI-ServerScheduler1)2)3)4)1.NCP通过K8s API 监控 所有Namespace 事件 2.用户创建一个新的K8s Namespace3.The K8s API Server通知 NCP Namespaces变化4.N
22、CP 为Namespace创建网络拓扑:a)从NSX预配的IP block中请求一个新的子网段b)创建逻辑交换机 c)创建一个T1路由器并和预配置的T0路由器相连d)在T1路由器上创建一个router port 和逻辑交换机连接,并从新子网段中分配一个Ip地址K8s/NSX 工作流26 Namespace 拓扑创建Hypervisor(ESXi&KVM)NodeVMDFWeth2NodeVMDFWeth0Minion Mgmt.IP Stacketh0Minion Mgmt.IP StackmgmtnetworkOVSmgmtnetworkVlan 10vlan 11cifcifeth2vla
23、n 10vlan 11OVScifcifNSX CNI PluginNSX CNI PluginPodsPods27 管理接口和用于Pods流量的接口物理分开 CIF用于每个 K8s Pod CIFs 通过本地有意义的VLAN标签区分 NSX CNI Plugin 负责给流量打上特定VLAN标签 NCP 负责把不同的VLAN标签映射到特定CIFNSX-T Container Interface(CIF)28NSX-T TraceflowNSX-T 基于K8S的 运维工具 29真正企业级的网络高安全端到端运维全面的网络可视化企业级的服务支持统一的VM-to-Pod 网络Pods微分段NSX-T给K8s带来的价值功能NSX-T为k8s带来的价值