标签:应用程序 两种 tun 项目 测试结果 架构 深圳市 kube-dns 深圳
作者:吴明秘Hi!欢迎来到Tungsten Fabric与Kubernetes集成指南系列,本文介绍通常创建虚拟网络的五个步骤。
Tungsten Fabric与K8s集成指南系列文章,由TF中文社区为您呈现,旨在帮助大家了解Tungsten Fabric与K8s集成的基础知识。大家在相关部署中有什么经验,或者遇到的问题,欢迎与我们联系。
在做好架构部署,并确认Tungsten Fabric和Kubernetes(K8s)集群的初始状态没有问题后,就可以开始尝试创建虚拟网络了。
在K8s中,大部分的资源都隶属于一个命名空间,所以需要首先新建命名空间,然后再创建对应的pod,service,以及虚拟网络。在此新建两个命名空间,分别为 test-ns1 和 test-ns2,登录K8s的master节点执行以下命令:
创建成功后,在Tungsten Fabric管理界面可以看到对应的project被创建出来,k8s-test-ns1与k8s-test-ns2。
你需要为你的项目创建一个IP地址管理(IPAM),基于此来创建一个虚拟网络。
在Tungsten Fabric管理界面选择“Configure > Networking > IP Address Management”,并选择project - k8s-test-ns1,然后单击“创建”按钮。
其中Name和Subnet Method为必填项,Subnet Method有两种方式,User Defined 是在绑定网络的时候再去手工指定子网网段,Flat 是直接创建子网网段,两者不同的是,User Defined可以指定IP池的范围,Flat则是直接使用整个子网网段,默认是使用Flat。
在Tungsten Fabric管理界面选择“Configure > Networking > Networks”,并选择 k8s-test-ns1,然后单击“创建”按钮。
如上图所示,就是完成了一个虚拟网络的创建,为了方便测试,再以相同的方式创建另一个网络 k8s-ns1-pod-net2 (10.10.20.0/24)。
首先在名为test-ns1的命名空间上创建一个pod,指定网络为 k8s-ns1-pod-net01,配置如下:
然后再创建一个基于虚拟网络k8s-ns1-pod-net02的pod,配置如下:
执行kubectl的创建命令之后,两个pod都创建成功,并且容器的IP地址分别为:
属于虚拟网络 k8s-ns1-pod-net01 (10.10.10.0/24)的pod 10.10.10.1
属于虚拟网络 k8s-ns1-pod-net02 (10.10.20.0/24)的pod 10.10.20.1
1、验证同一命名空间不通网络pod之间网络连通性
首先进行互ping,验证连通性。测试结果如下截图,同一命名空间下,默认情况两个网络无法通信。
需要通信则必须在Tungsten Fabric上添加一个路由器来连接网络 k8s-ns1-pod-net01 和 k8s-ns1-pod-net02,如下所示:
路由器创建完成后再验证两个网络的连通性,结果是两个pod能够互相通信。
2、验证同一命名空间下pod到service之间的网络连通性
默认情况下,除了 k8s-default-pod-network 之外,其他的虚拟网络是无法连接到K8s的service网络的,通过请求kube-system中的coredns服务来验证,命令为 nslookup kube-dns.kube-system,因为是跨命名空间去解析域名,所以需要在域名中添加命名空间名称后缀(如果pod是在kube-system中,那么执行nslookup kube-dns即可),具体验证情况如下:
若需要让k8s-ns1-pod-net01 网段的pod可以访问到K8s的service网络,那么就需要添加一条TF policy,k8s-default项目下的Policies -- k8s-default-service-np,具体策略规则如下图所示,意味着所有添加了此条规则的网络都可以无限制的访问到k8s的service网络的所有端口。
现在需要给网络 k8s-ns1-pod-net01添加 k8s-default-service-np 这条策略,让它可以访问k8s的service网络。
Configure --> Networking --> Networks, 选择k8s-test-ns1项目,编辑network k8s-ns1-pod-net01, 附加一条Network Policy -- k8s-default-service-np,具体操作如下:
再次验证pod到service之间的网络连通性,此时处在网络k8s-ns1-pod-net01的pod nginx01-ns1-net01 (10.10.10.1) 是可以直接通过请求service的ClusterIP:PORT(coredns服务)来解析域名,而k8s-ns1-pod-net02 没有附加k8s-default-service-np,所以pod nginx01-ns1-net02 (10.10.20.1) 是仍然无法访问service里面的coredns服务。
3、验证不同命名空间下pod之间的网络连通性
同一命名空间下的两个网络之间的通信,跟不同命名空间下的两个网络之间的通信是有一些区别的,因为不同命名空间的情况下,无法通过新建TF Router来连接两个网络,所以必须通过TF Policy 来实现不同命名空间下的两个网络之间的互通。
之前的步骤中已经创建了两个命名空间 (test-ns1与test-ns2),并且test-ns1里面已经有了两个网络,所以需要在test-ns2中去新建一个网络。新建的网络为 k8s-ns2-pod-net01 (20.10.10.0/24)。
默认情况下,k8s-ns2-pod-net01 (20.10.10.0/24) 与 k8s-ns1-pod-net01 (10.10.10.0/24),k8s-ns1-pod-net02 (10.10.20.0/24) 都是无法通信的,现在需要在网络k8s-ns2-pod-net01 (20.10.10.0/24)中新建两个pod。
在此验证pod nginx01-ns1-net01 与 nginx01-ns2-net01的网络连通性,两者在不同的命名空间,不同的network,验证结果是无法通信,具体见下面截图:
若需要让这两个不同命名空间不同network的pod能够互相通信,则需要添加如下的TF Policies:
Contrial Network Policy 创建好之后,再分别将它附加到网络 k8s-ns1-pod-net01和k8s-ns2-pod-net01。
再次验证,此时两个不同命名空间不同network的pod已经能够互相通信。
(作者来自深圳市天源景云科技有限公司)
Tungsten Fabric+K8s集成指南系列文章---
第一篇:部署准备与初始状态
Tungsten Fabric+K8s轻松上手系列文章---
第一篇:TF Carbide 评估指南--准备篇
第二篇:通过Kubernetes的服务进行基本应用程序连接
第三篇:通过Kubernetes Ingress进行高级外部应用程序连接
第四篇:通过Kubernetes命名空间实现初步的应用程序隔离
第五篇:通过Kubernetes网络策略进行应用程序微分段
关注微信:TF中文社区
Tungsten Fabric与K8s集成指南丨创建虚拟网络
标签:应用程序 两种 tun 项目 测试结果 架构 深圳市 kube-dns 深圳
原文地址:https://blog.51cto.com/14638699/2474104