前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubenerters中多种服务访问方式以及相应的安全组设置在腾讯云的落地实践

Kubenerters中多种服务访问方式以及相应的安全组设置在腾讯云的落地实践

原创
作者头像
腾讯云容器服务团队
修改2017-09-07 11:09:49
8.8K2
修改2017-09-07 11:09:49
举报

一、kubenerters服务的三种访问方式介绍

kubenerters中对于服务的访问,提供了多种访问方式,以适应不同的使用场景。其中主要的访问方式有ClusterIP,NodePort以及LoadBalancer三种。

三种访问方式详细对比说明入下表所示:

访问方式

说明

优点

缺点

备注

ClusterIP方式

默认类型,自动分配一个仅cluster内部可以访问的虚拟IP。可以通过ServiceIP:Port来访问该服务

使用简单

仅支持集群内部访问

---------

NodePort方式

在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过NodeIP:NodePort来访问该服务

支持内部和外部访问,无额外外部依赖

直接作为负载均衡器,性能较差。同一个集群内,服务的NodePort不可重复。

NodePort默认端口范围为30000~32768

LoadBalancer方式

在NodePort的基础上,借助cloud provider创建一个外部的负载均衡器,并将请求转发到NodeIP:NodePort

能更好的利用平台的负载均衡能力

创建时依赖于各个云平台的cloud provider,存在两次转发

K8S 1.6中cloud provider已经独立成cloud-controller-manager

(1) ClusterIP访问方式,适用于集群内服务间相互访问的场景,其访问的流程如下图所示:

kubenerters服务ClusterIP访问方式
kubenerters服务ClusterIP访问方式

访问的数据流向为: Pod Front>ServiceIP:Port-->kube-proxy(iptables)-->Pod Backend

1、Pod Front-->kube-proxy: 通过ServiceIP:Port访问,ServiceIP可以通过环境变量或者dns查询

2、kube-proxy-->Pod Backend 通过Iptable或者tcp端口转发到Backend服务的任意一个端口,可能在同一节点,也可能在不同节点

(2) NodePort访问方式,在无外部负载均衡器的情况下,可以通过NodePort提供外部访问的能力,其访问的流程如下图所示:

kubenerters服务NodePort访问方式
kubenerters服务NodePort访问方式

访问的数据流向为: Client-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend

1、Client-->kube-proxy: 通过NodeIP:NodePor访问,NodeIP可以是集群中任意一个节点的IP,NodePort一般通过K8S随机分配,默认分配范围为30000---32768

2、kube-proxy-->Pod Backend: (同ClusterIP访问)

(3) 在外部存在负载均衡器的情况下,一般通过LoadBalancer的方式实现外网访问(其底层依赖于NodePort),其访问的流程如下图所示:

kubenerters服务LoadBalancer访问方式
kubenerters服务LoadBalancer访问方式

访问的数据流向为: Client-->VIP:VPort-->负载均衡器-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend

1、 Client-->负载均衡器: 通过VIP:VPor访问,也可以通过负载均衡器中绑定的域名进行访问

2、负载均衡器-->kube-proxy: 负载均衡器在可用的节点中,根据均衡算法选择一个节点进行转发,转发的目的端口为NodePort

3、kube-proxy-->Pod Backend: (同ClusterIP访问)

二、kubenerters服务访问在腾讯云容器中的使用情况

腾讯云容器服务目前提供的服务访问方式包括: 对公网负载均衡访问,同VPC内(内网)负载均衡访问,仅集群内访问等几种方式。同时用户也可以通过创建ingress负载均衡器,先通过外部的负载均衡器将流量转发到ingress Pod上,再有ingress实现转发(目前仅支持7层转发)。

(1) 外网负载均衡访问,在创建服务时选择负载均衡访问方式为公网。客户端访问流程K8S集群中的服务流程入下图所示:

通过外网负载均衡访问集群内服务
通过外网负载均衡访问集群内服务

访问的数据流向为: Client-->VIP:VPort(外网IP)-->外网负载均衡器-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend

访问的具体流程,与LoadBalancer访问方式相同,腾讯云容器服务在K8S内嵌入腾讯云的Cloud Provider。在控制台创建服务时,如果选择了公网访问,腾讯云的Cloud Provider会自动调用腾讯云的CLB(负载均衡)服务创建一个外网的LB,并与该服务绑定。

在容器服务控制台,点击服务-->选中一个服务后单击-->选中展示服务信息可以看到服务中访问有关的信息,下图是作者用来的一个例子:

服务信息展示
服务信息展示
服务信息展示-端口信息
服务信息展示-端口信息

其中访问相关的信息包括: 服务关联的负载均衡器,外部访问服务的方式(通过VIP:VPort),集群内范围服务的方式(通过ServiceIP:Port)等

点击展示的负载均衡器LB,跳转到负载均衡器页面,可以看到负载均衡器信息。

LB展示信息
LB展示信息

从负载均衡器中的展示信息可以看到,负载均衡器暴露服务端口(在服务创建时用户填写,建议与容器端口保持一致)对外提供访问,负载均衡器后端监听各个Node节点,监听端口为该K8S为该服务分配的NodePort(该端口由集群随机分配,默认范围为30000~32768)。

(2) 同VPC内(内网)负载均衡访问,在创建服务时选择负载均衡访问方式为内网。客户端访问流程K8S集群中的服务流程入下图所示:

通过内网负载均衡访问集群内服务
通过内网负载均衡访问集群内服务

访问的数据流向为: Client-->VIP:VPort(内网IP)-->外网负载均衡器-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend

处理流程与通过外网负载均衡访问集群内服务相同,只是负载均衡器VIP为一个内网IP,仅支持在同一VPC内访问,不提供外网访问的能力。在控制台创建服务时,负载均衡器模式选择内网,腾讯云的Cloud Provider会自动调用腾讯云的CLB(负载均衡)服务创建一个内网的LB,并与该服务绑定。

(3) 仅集群内访问,创建服务时默认提供服务间互相访问的能力,通过服务名称和ServerIP都可以访问,但仅限于集群内部服务互访:

集群内相互访问
集群内相互访问

访问的数据流向为: Pod Front-->DNS-->Pod Front--->ServiceIP:Port-->kube-proxy(iptables)-->Pod Backend

集群内访问能力,为默认提供的能力,如果需要仅支持集群内访问则在创建服务时选择[仅支持集群内访问]选项。(在外网和内网负载均衡器访问的服务中,集群内访问能力依然支持)

三、腾讯云容器服务中对应的安全组设置策略

安全组策略设置,一直遵循的原则是开放最小权限。例如在一个Web服务的场景中,访问流程入下图所示:

Web服务的访问流程图
Web服务的访问流程图

访问的数据流向为: Client-->VIP:VPort(外网IP)-->外网负载均衡器-->前端服务-->后端服务

根据安全组设置最小权限原则,安全组开放规则为:

前端服务节点开放8080端口的外网/内网入规则,开放9376端口的内网出规则

后端服务节点开放9376端口的内网入规则

在K8S集群中,由于前端服务和后端服务采用分布式部署的策略,根据资源的使用情况不同服务的POD还会出现实例的迁移。所以建议在设置容器服务安全组策略时,将集群内所有节点的安全组策略设置为一样。

同时考虑腾讯云容器服务中提供的访问方式,外网负载均衡,内网负载均衡,集群内访问,访问的数据流为 外网负载均衡数据流: Client-->VIP:VPort(外网IP)-->外网负载均衡器-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend

内网负载均衡数据流: Client-->VIP:VPort(内网IP)-->外网负载均衡器-->NodeIP:NodePort>kube-proxy(iptables)-->Pod Backend

集群内服务互相访问: Pod Front-->DNS-->Pod Front--->ServiceIP:Port-->kube-proxy(iptables)-->Pod Backend

所以需要放通的安全组规则为:

1、放通该服务NodePort内/外网访问的入规则 (外网负载均衡,内网负载均衡)

2、放通该服务容器端口内网访问的出/入规则 (外网负载均衡,内网负载均衡,集群内访问)

3、放通DNS服务访问的53端口,UDP协议

为了简化用户在设置集群中服务访问安全组规则的复杂性,腾讯云容器服务提供了集群中服务访问的通用规则模板。用户在集群创建时,点击新建安全组,则可以自动创建。该模板规则如下:

通用模板入规则
通用模板入规则
通用模板出规则
通用模板出规则

通用规则规则为:

入规则:放通30000~32768端口,支持通过NodePort的访问 放通内网直接相互访问,支持服务直接集群内互访 放通SSH服务22端口 (Linux主机通用设置)

出规则: 放通全部端口

在创建集群或者往集群内添加主机时,建议将安全组规则设置为该模板提供的通用规则。如果有更强的安全防范需求,用户可以在该规则的基础上,做进一步的修改,以满足业务的访问需求,但最小规则应该满足集群中服务访问所需要满足的规则。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、kubenerters服务的三种访问方式介绍
  • 二、kubenerters服务访问在腾讯云容器中的使用情况
  • 三、腾讯云容器服务中对应的安全组设置策略
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档