• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

terway: Terway 网络插件/CNI plugin for alibaba cloud VPC/ENI

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

terway

开源软件地址:

https://gitee.com/AliyunContainerService/terway

开源软件介绍:

Terway 网络插件

CNI plugin for alibaba cloud VPC/ENI

CircleCI

English | 简体中文

安装Kubernetes

  • 准备阿里云ECS机器,我们验证过的ECS镜像是Centos 7.4/7.6
  • 使用kubeadm的指导文档来创建集群

安装好了之后要:

  • 将iptables的policy换成ACCEPT,iptables -P FORWARD ACCEPT
  • 检查节点上的"rp_filter"内核参数,并在每个节点上将其设置为"0"。

通过kubectl get cs验证集群安装完成

安装terway插件

Terway有两种安装模式:

  • VPC模式

    VPC模式,使用Aliyun VPC路由来打通网络,可以使用独立ENI给Pod,安装方式:
    修改terway.yml文件中的eni.conf的配置中的授权和网段配置,以及Network的网段配置,然后通过kubectl apply -f terway.yml来安装terway插件。

  • ENI多IP模式

    ENI多IP模式,使用Aliyun ENI的辅助IP来打通网络,不受VPC的路由条目限制,安装方式:
    修改terway-multiip.yml文件中的eni.conf的配置中的授权和资源配置,然后通过kubectl apply -f terway-multiip.yml来安装terway插件。

使用kubectl get ds terway看到插件在每个节点上都运行起来后,表明插件安装成功。

验证terway的功能

一般VPC网络的容器

在VPC安装模式下,在容器没有做任何特殊配置时,terway会通过在节点上的podCidr中去分配地址然后配置给容器。例如:

[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl run -it --rm --image busybox busyboxIf you don't see a command prompt, try pressing enter./ # ip link1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:003: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue    link/ether 46:02:02:6b:65:1e brd ff:ff:ff:ff:ff:ff/ # ip addr show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever3: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue    link/ether 46:02:02:6b:65:1e brd ff:ff:ff:ff:ff:ff    inet 172.30.0.4/24 brd 172.30.0.255 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::4402:2ff:fe6b:651e/64 scope link       valid_lft forever preferred_lft forever

使用ENI弹性网卡获得等同于底层网络的性能

在VPC安装模式下,在Pod的其中一个container的requests中增加对eni的需求: aliyun/eni: 1, 下面的例子将创建一个Nginx Pod,并分配一个ENI

apiVersion: v1kind: Podmetadata:  name: nginxspec:  containers:  - name: nginx    image: nginx    resources:      limits:        aliyun/eni: 1

然后我们exec到这个容器中就可以看到terway创建并绑定了一个ECS的弹性网卡:

[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl exec -it nginx sh# ip addr show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000    link/ether 00:16:3e:02:38:05 brd ff:ff:ff:ff:ff:ff    inet 172.31.80.193/20 brd 172.31.95.255 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::216:3eff:fe02:3805/64 scope link       valid_lft forever preferred_lft forever4: veth1@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP    link/ether 1e:60:c7:cb:1e:0e brd ff:ff:ff:ff:ff:ff    inet6 fe80::1c60:c7ff:fecb:1e0e/64 scope link       valid_lft forever preferred_lft forever

ENI辅助IP的容器:

在ENI多IP安装模式下,Terway会通过创建和分配ENI和ENI网卡上的辅助IP地址给Pod使用,Pod上的IP地址将和VPC和VSwitch的IP地址相同段,例如:

[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl get pod -o wideNAME                     READY   STATUS    RESTARTS   AGE   IP              NODE                                 NOMINATED NODEnginx-64f497f8fd-ckpdm   1/1     Running   0          4d    192.168.0.191   cn-hangzhou.i-j6c86lmr8k9rk78ju0nc   <none>[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl get node -o wide cn-hangzhou.i-j6c86lmr8k9rk78ju0ncNAME                                 STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIMEcn-hangzhou.i-j6c86lmr8k9rk78ju0nc   Ready    <none>   12d   v1.11.5   192.168.0.154   <none>        CentOS Linux 7 (Core)   3.10.0-693.2.2.el7.x86_64   docker://17.6.2[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl exec -it nginx-64f497f8fd-ckpdm bashroot@nginx-64f497f8fd-ckpdm:/# ip addr show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever3: eth0@if106: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default    link/ether 4a:60:eb:97:f4:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0    inet 192.168.0.191/32 brd 192.168.0.191 scope global eth0       valid_lft forever preferred_lft forever

使用NetworkPolicy来限制容器间访问

Terway插件兼容标准的K8S中的NetworkPolicy来控制容器间的访问,例如:

  1. 启动一个用于测试的服务

    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run nginx --image=nginx --replicas=2deployment "nginx" created[root@iZbp126bomo449eksjknkeZ ~]# kubectl expose deployment nginx --port=80service "nginx" exposed
  2. 验证到这个服务是可以访问的

    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run busybox --rm -ti --image=busybox /bin/shIf you don't see a command prompt, try pressing enter./ # wget --spider --timeout=1 nginxConnecting to nginx (172.21.0.225:80)/ #
  3. 配置network policy规则,只允许某些标签的服务访问

    kind: NetworkPolicyapiVersion: networking.k8s.io/v1metadata:  name: access-nginxspec:  podSelector:    matchLabels:      run: nginx  ingress:  - from:    - podSelector:        matchLabels:          access: "true"
  4. 测试没有指定标签的Pod访问服务被拒绝了,而指定标签的容器能够正常的访问

    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run busybox --rm -ti --image=busybox /bin/shIf you don't see a command prompt, try pressing enter./ # wget --spider --timeout=1 nginxConnecting to nginx (172.21.0.225:80)wget: download timed out/ #[root@iZbp126bomo449eksjknkeZ ~]# kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/shIf you don't see a command prompt, try pressing enter./ # wget --spider --timeout=1 nginxConnecting to nginx (172.21.0.225:80)/ #

限制容器的出入带宽

Terway插件通过配置容器网卡上的限流规则来实现对容器的流量控制,避免由于单个容器的流量占满整个节点的流量,通过配置Pod上的k8s.aliyun.com/ingress-bandwidthk8s.aliyun.com/egress-bandwidth分别来配置容器上的进入的和出去的带宽,例如:

apiVersion: v1kind: Podmetadata:  name: nginx  annotations:    k8s.aliyun.com/ingress-bandwidth: 1m    k8s.aliyun.com/egress-bandwidth: 1mspec:  nodeSelector:    kubernetes.io/hostname: cn-shanghai.i-uf63p6s96kf4jfh8wpwn  containers:  - name: nginx    image: nginx:1.7.9    ports:    - containerPort: 80

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap