网络管理
服务
概述
服务 (Service) 为容器组提供一个统一的访问入口,可使应用方便地实现服务发现和负载均衡。
功能原理
通常情况下,由于容器组经常被快速地创建和销毁,即使每个容器组拥有固定的IP地址,直接访问容器组以获取应用服务仍是一种不可依赖的方式,因为现在正在运行应用程序的容器组可能与下一刻运行该应用程序的容器组不同。
为给这些快速变化的容器组提供统一的访问入口,引入了服务的概念。服务具有单独的固定IP地址,并自动将访问这个IP地址的流量转发到相应容器组,容器组的选择通过标签决定。即使后端运行应用程序的容器组发生了改变,用户仍能通过服务快速访问且无变化感知。同时,服务可帮助实现容器组间的负载均衡。
服务类型
- ClusterIP:ClusterIP类型的服务不对集群外暴露。系统为其分配集群IP,通过该IP可以从集群内访问服务。
- NodePort:NodePort类型的服务以集群节点IP+静态端口的形式对外暴露,通过NodeIP (集群任意节点IP):NodePort
(集群端口)即可从集群外访问。Note: NodePort类型的服务会自动创建并路由到一个ClusterIP服务。
- LoadBalancer:LoadBalancer类型的服务通过ZStack Zaku的metallb负载均衡功能对外暴露。系统为其分配外部网络IP,通过该IP可从集群外访问服务。
- Headless:Headless类型的服务没有固定的IP地址,客户端访问服务的域名后,可收到通过DNS返回的所有容器组IP地址,并可通过DNS实现后端容器组的负载均衡。Headless类型的服务通常与StatefulSet工作负载搭配使用,用于各容器组副本间的访问。
创建服务
在ZStack Zaku主菜单,点击,进入服务界面。点击创建服务,弹出创建服务界面。
- 名称:设置服务名称。命名规则:长度限制1-50个字符,只能包含小写字母、数字及分隔符 (-),且必须以小写字母开头,数字或小写字母结尾
- 关联工作负载:为服务关联工作负载,访问该服务的流量将被转发到关联工作负载下的容器组,支持两种关联方式:选择工作负载、按标签关联
- 选择工作负载:直接选择已有的工作负载
- 按标签关联:填写工作负载的容器组标签键和值,系统将根据该标签自动筛选工作负载与服务关联
Note: 服务通过标签决定向哪个容器组转发流量,如容器组包含用户在此处填写的所有标签,则服务就会向该容器组转发流量 -
类型:选择服务的类型,类型定义详见服务类型Note: 当服务类型为Headless,且关联工作负载为StatefulSet类型时,服务的名称必须设置与该StatefulSet高级配置中的服务名称一致。
- IP类型:选择服务IP地址类型,目前仅支持 IPv4 类型
- 服务外部网络:可选项,类型为LoadBalancer时可填写该项,为LoadBalancer服务选择服务外部网络,用户可从集群外通过服务外部网络IP访问LoadBalancer服务
- 指定IPv4:可选项,选择服务外部网络后可填写该项,为LoadBalancer服务手动指定服务外部网络IPv4,如不指定,服务外部网络将为服务随机分配一个IPv4Note: 指定的IP地址必须在所选服务外部网络范围内,且避免地址冲突。
- 服务端口:设置以下信息:
- 端口:设置服务接收流量的端口
- 容器端口:设置服务将流量转发到的容器端口
- 端口名称:设置端口的名称,如不设置则默认为“ze-协议-端口-容器端口”,如 ze-tcp-80-80
- 主机端口:可选项,类型为NodePort时可设置该项,主机端口即集群节点端口 (NodePort),用户使用NodeIP:NodePort可从集群外访问NodePort服务,取值范围:30000-32767。如不设置,集群将随机分配一个端口
- 协议:设置访问协议类型,支持TCP、UDP两种协议类型
- 会话保持:选择是否开启会话保持,开启后,指定时间内来自同一客户端IP的访问请求将全部转发给同一个容器组,默认不开启Note: 如客户端请求经过nginx或其他代理服务器转发,则系统可能将代理服务器IP识别为客户端IP。
- 最大会话保持时间:如启用会话保持,需设置最大会话保持时间,默认为10800,单位:秒,取值范围:300-86400范围内的整数
- 标签:可选项,添加服务标签
- 键:填写标签键名Note:
- 通常情况下,键名可包含1-63个字符,包括字母、数字和以下特殊字符:(-)(_)(.),特殊字符不能用于键名开头或结尾。
- 支持在键名前添加前缀,并用/与键名连接,例如k8s.io/app,填写在/之前的所有字符都将被认为是键名前缀,之后的所有字符都将被认为是键名。
- 键名前缀可包含1-253个字符,包括小写字母、数字和以下特殊字符:(-)(_)(.) ,不能连续使用2个及以上特殊字符,且不能将特殊字符用于前缀开头或结尾。
- 请注意,您并不必须使用键名前缀,但必须填写键名。
- 值:填写标签的值
- 键:填写标签键名
- 注解:可选项,添加服务注解
- 键:填写注解键名Note:
- 通常情况下,键名可包含1-63个字符,包括字母、数字和以下特殊字符:(-)(_)(.),特殊字符不能用于键名开头或结尾。
- 支持在键名前添加前缀,并用/与键名连接,例如k8s.io/app,填写在/之前的所有字符都将被认为是键名前缀,之后的所有字符都将被认为是键名。
- 键名前缀可包含1-253个字符,包括小写字母、数字和以下特殊字符:(-)(_)(.) ,不能连续使用2个及以上特殊字符,且不能将特殊字符用于前缀开头或结尾。
- 请注意,您并不必须使用键名前缀,但必须填写键名。
- 值:填写注解的值
- 键:填写注解键名


管理服务
在ZStack Zaku主菜单,点击,进入服务界面。
服务支持以下操作:
| 操作 | 描述 |
|---|---|
| 创建服务 | 创建一个新服务。 |
| 修改服务 | 通过表单形式更新服务配置。 Note: 如当前服务通过Yaml形式创建,且spec.ipFamilies的值为IPv6或IPv6,IPv4,则该服务不支持通过表单形式修改。用户可点击更新Yaml,修改服务配置。 |
| 更新Yaml | 通过Yaml形式更新服务配置。 |
| 服务详情 | 进入服务详情页,查看服务基本信息、端口信息和事件。 |
| 删除服务 | 将服务从集群删除。 |
路由
概述
路由 (Ingress) 是用于集群外部访问集群内服务 (Servcie) 的一组HTTP或HTTPS路由规则的集合,为集群服务提供外部可访问的URL、负载均衡、SSL终止、HTTP路由。路由功能具有7层负载均衡的能力,可根据不同URL将流量转发到不同的服务。
功能实现
路由功能依靠Ingress Controller实现,例如Nginx Ingress Controller或Traefik等。Ingress Controller是运行在Kubernetes集群中的应用,负责监听路由资源的变化并更新负载均衡器或反向代理服务器的配置,从而按照路由规则,实现外部流量对服务的访问。
ZStack Zaku应用市场提供nginx-ingress-controller部署包,用户可进入应用市场,一键发布该部署包,安装Nginx Ingress Controller,也可通过其他方式部署自己的的Ingress Controller。
创建路由
在ZStack Zaku主菜单,点击。在路由界面,点击创建路由,弹出创建路由界面。
- 名称:设置路由名称。命名规则:长度限制1-50个字符,只能包含小写字母、数字及分隔符 (-),且必须以小写字母开头,数字或小写字母结尾
- IngressClass:选择IngressClass以指定处理路由的Ingress
ControllerNote: 请确保已提前部署Ingress Controller,如未部署,可前往,一键发布nginx-ingress-controller。
- 路由规则:配置路由规则,一个路由下支持配置多条路由规则,可参考以下示例输入相应内容:
- 域名:可选项,填写实际访问的域名地址。路由创建完成后,可在DNS服务中配置域名解析规则,使域名解析到该路由的网关IP,即可实现域名访问
- 协议:选择协议类型,支持HTTP、HTTPS两种协议类型
- 保密字典:协议类型为HTTPS时,需绑定TLS类型的保密字典,以支持HTTPS数据传输加密认证
- 路径类型:选择路径类型。路径类型决定路径的匹配方式,支持以下3种路径类型,默认为ImplementationSpecific:
- ImplementationSpecific:路径匹配方式由IngressClass决定,IngressClass可能采用单独的匹配方式,也可能采用与Exact或Prefix相同的匹配方式。
- Exact:精确匹配URL路径,且区分大小写。例如,路径设置为/foo,请求路径为/foo,则请求与路径匹配;如请求路径为/foo/,则请求与路径不匹配。
- Prefix:基于以/分隔的URL路径前缀进行匹配。匹配区分大小写,并且针对路径中的元素逐个完成。路径元素是指由/分隔的路径中的标签列表,如果路径中的每个部分都是请求路径的元素前缀,则请求与路径匹配。例如,路径设置为/foo,请求路径为/foo,则请求与路径匹配;如请求路径为/foo/,则该请求也与路径匹配。
- 路径:指定允许访问的URL路径,默认为根路径/
- 目标服务:选择被访问的服务
- 目标服务端口:选择被访问的服务端口
- 标签:可选项,添加标签
- 键:填写标签键名Note:
- 通常情况下,键名可包含1-63个字符,包括字母、数字和以下特殊字符:(-)(_)(.),特殊字符不能用于键名开头或结尾。
- 支持在键名前添加前缀,并用/与键名连接,例如k8s.io/app,填写在/之前的所有字符都将被认为是键名前缀,之后的所有字符都将被认为是键名。
- 键名前缀可包含1-253个字符,包括小写字母、数字和以下特殊字符:(-)(_)(.) ,不能连续使用2个及以上特殊字符,且不能将特殊字符用于前缀开头或结尾。
- 请注意,您并不必须使用键名前缀,但必须填写键名。
- 值:填写标签的值
- 键:填写标签键名
- 注解:可选项,添加注解
- 键:填写注解键名Note:
- 通常情况下,键名可包含1-63个字符,包括字母、数字和以下特殊字符:(-)(_)(.),特殊字符不能用于键名开头或结尾。
- 支持在键名前添加前缀,并用/与键名连接,例如k8s.io/app,填写在/之前的所有字符都将被认为是键名前缀,之后的所有字符都将被认为是键名。
- 键名前缀可包含1-253个字符,包括小写字母、数字和以下特殊字符:(-)(_)(.) ,不能连续使用2个及以上特殊字符,且不能将特殊字符用于前缀开头或结尾。
- 请注意,您并不必须使用键名前缀,但必须填写键名。
- 值:填写注解的值
- 键:填写注解键名

管理路由
在ZStack Zaku主菜单,点击,进入路由界面。
| 操作 | 描述 |
|---|---|
| 创建路由 | 创建一个新路由。 |
| 更新Yaml | 通过Yaml方式对路由进行更新。 |
| 修改IngressClass | 修改路由关联的IngressClass。 |
| 修改路由规则 | 修改路由规则。 |
| 编辑标签注解 | 编辑路由的标签、注解 |
| 路由详情 | 进入路由详情页,查看路由基本信息和事件。 |
| 删除路由 | 将路由从集群删除。 |
路由使用说明
部署Ingress Controller
背景信息
路由定义了通过HTTP和HTTPS协议处理进入集群流量的规则,Ingress Controller负责实施这些规则。因此,创建路由前,必须保证集群中已正确安装Ingress Controller。本节主要介绍如何通过ZStack Zaku应用市场内置的nginx-ingress-controller部署包,安装Ingress Controller。操作步骤
- 在ZStack Zaku主菜单,点击,进入应用市场界面。
-
在应用市场,找到nginx-ingress-controller部署包,点击。
如图 1所示:
图 1. nginx-ingress-controller部署包 
-
在发布应用界面,参考以下示例输入相应内容:
- 应用名称:设置应用名称。长度限制2-20字符,输入内容只能包含小写字母、数字和特殊字符 (-),且必须以小写字母开头,以小写字母或者数字结尾
- 版本:设置应用版本
- 简介:可选项,备注应用相关信息
- 集群:选择应用所发布到的集群
- 命名空间:选择应用所发布到的命名空间
- Chart版本:展示默认的Chart版本,目前不支持修改
- 应用配置:修改部署包中values文件的配置内容Note:
- 如在同一集群中安装了多个Nginx Ingress Controller,建议修改以下配置,因为多个Nginx
Ingress Controller配置重复可能会产生冲突:
- nameOverride:IngressController名称
- ingressClassResource.name:IngressClass名称
- ingressClassResource.controllerClass:与nameOverride保持一致
- 缺少可用的外部网络IP时,可将service.type参数的值设置为NodePort,设置后,使用该Ingress Controller的路由的网关地址将使用集群节点IP。
- 如在同一集群中安装了多个Nginx Ingress Controller,建议修改以下配置,因为多个Nginx
Ingress Controller配置重复可能会产生冲突:
如图 2所示:图 2. 发布应用 
通过路由访问服务
背景信息
本节主要介绍从外部通过路由访问服务的方法。操作步骤
- 创建路由。
-
查看路由网关地址和路由规则中的域名。
在路由界面,点击步骤1中创建的路由,进入路由详情页,查看基本信息中的路由网关IP地址和路由规则中每条规则配置的域名。
-
配置域名解析规则。
登录DNS服务器或客户机,在hosts文件中配置域名解析规则,使域名解析到路由的网关IP地址。
-
查看访问地址。
进入路由详情页,展开路由规则,查看转发策略的访问地址。
- 通过访问地址访问对应的目标服务。
网络策略
概述
网络策略 (NetworkPolicy) 是控制工作负载与工作负载间,及工作负载与外部通信行为的策略,通过过滤入站、出站流量,保护应用程序免受网络攻击。
功能特点
网络策略规则
- 入流量规则:控制从外部访问工作负载的流量来源。ZStack Zaku提供三种入流量规则设置方式:
- 允许所有流量:不区分来源,所有流量均可访问当前工作负载
- 拒绝所有流量:不区分来源,所有流量均不允许访问当前工作负载
- 自定义规则:手动指定当前工作负载的访问规则,可指定的内容包括:允许的流量来源、访问协议、端口
- 流量来源:允许访问当前工作负载的流量来源,可以指定为一个命名空间、工作负载或网段
- 访问协议:流量来源访问工作负载时使用的访问协议,支持TCP、UDP两种协议类型
- 端口:当前工作负载可被指定来源访问的端口
Note: 自定义规则采用白名单机制,即添加自定义规则后,除规则指定的流量外,其他流量均不允许访问当前工作负载。
- 出流量规则:控制从工作负载发出的流量去向。ZStack Zaku提供两种入流量规则设置方式:
- 允许所有流量:不区分流量去向,工作负载可访问任意目的
- 自定义规则:手动指定当前工作负载的出流量规则,可指定的内容包括:允许的流量去向、访问协议、端口
- 流量去向:允许当前工作负载访问的目的,可以指定为一个或多个命名空间、工作负载或网段
- 访问协议:工作负载访问指定目的时使用的访问协议,支持TCP、UDP两种访问类型
- 端口:流量目的上可被当前工作负载访问的端口
Note: 自定义规则采用白名单机制,即添加自定义规则后,除规则指定的流量去向外,其他从工作负载发出的流量均不被允许。
- 规则数量和优先级:一个网络策略下可添加多条出/入流量规则,多条规则没有优先级顺序,将同时对加载的工作负载生效
网络策略与工作负载
- 如未加载网络策略,工作负载上所有出、入流量均被允许;加载网络策略后,工作负载通信将遵循网络策略规则。
- 一个工作负载可加载多个网络策略,多个网络策略没有生效优先级,将同时对该工作负载生效。
- 如工作负载已开启“使用主机网络(hostNetwork)”,或工作负载的网络类型为“容器组外部网络”,则加载的网络策略对该工作负载不生效。
- 如工作负载的网络类型为“容器组网络和外部网络”,则加载的网络策略仅对容器组网络对应的网络流量生效,容器组外部网络对应的网络流量不支持网络策略。
- 为工作负载配置网络策略时,请同时注意对端的通信规则。例如,需使工作负载A访问工作负载B,除需允许工作负载A去往工作负载B的出流量,还需确保工作负载B允许来自工作负载A的入流量。
创建网络策略
在ZStack Zaku主菜单,点击。在网络策略界面,点击创建网络策略,弹出创建网络策略界面。
- 名称:设置网络策略名称。命名规则:长度限制1-50个字符,只能包含小写字母、数字及分隔符 (-),且必须以小写字母开头,数字或小写字母结尾
- 工作负载:选择当前网络策略作用的工作负载,可作用于当前命名空间下全部工作负载,或仅作用于手动指定的工作负载
- 入流量规则:设置入流量规则,支持三种规则类型:允许所有流量、拒绝所有流量、自定义规则。选择自定义规则时,需点击添加入流量规则,并设置以下参数:
- 允许的流量来源:设置允许的流量来源,支持三种流量来源类型:命名空间、工作负载、网段:
- 命名空间:指定一个命名空间,允许来自该命名空间的流量访问当前工作负载
- 工作负载:指定一个工作负载,允许来自该工作负载的流量访问当前工作负载
- 网段:指定一个网段,允许来自该网段的流量访问当前工作负载
- 允许网段:当前IPv4网段仅支持指定0.0.0.0/0,表示允许所有网段访问工作负载
- 协议:设置流量来源访问当前工作负载时使用的协议,支持TCP、UDP两种协议类型
- 端口:设置当前工作负载可被流量来源访问的端口,支持设置1-65535范围内的端口
- 允许的流量来源:设置允许的流量来源,支持三种流量来源类型:命名空间、工作负载、网段:
- 出流量规则:设置出流量规则,支持两种规则类型:允许所有流量、自定义规则。选择自定义规则时,需点击添加出流量规则,并设置以下参数:
- 允许的流量去向:设置允许的流量去向,支持三种流量去向类型:命名空间、工作负载、网段:
- 命名空间:指定一个命名空间,允许当前工作负载访问该命名空间
- 工作负载:指定一个工作负载,允许当前工作负载访问该工作负载
- 网段:指定一个网段,允许当前工作负载访问该网段
- 允许网段:填写允许当前工作负载访问的网段
- 排除子网段:可选项,填写一个允许网段范围内的子网段。工作负载将不允许访问被排除的子网段。
- 协议:指定当前工作负载访问指定目的时使用的协议,支持TCP、UDP两种协议类型
- 端口:指定当前工作负载可访问的目的端口,支持设置1-65535范围内的端口
Note: 自定义出流量规则时,系统将自动添加一条规则,用于允许工作负载访问NodeLocalDNS,提供DNS服务,如不需要,可手动删除该规则。 - 允许的流量去向:设置允许的流量去向,支持三种流量去向类型:命名空间、工作负载、网段:

管理网络策略
在ZStack Zaku主菜单,点击,进入网络策略界面。
| 操作 | 描述 |
|---|---|
| 创建网络策略 | 创建一个新的网络策略。 |
| 修改网络策略 | 通过表单形式修改网络策略,包括挂载的工作负载、出/入流量规则等。 Note: 如网络策略通过非表单形式创建,或曾通过非表单形式修改,则不再支持以表单形式修改。用户可使用Yaml方式修改网络策略配置。 |
| 更新Yaml | 通过Yaml形式修改网络策略 |
| 网络策略详情 | 进入外部网络详情页,查看网络策略基本信息和出/入流量规则 |
| 删除网络策略 | 删除网络策略。 Note: 删除后,该网络策略下的规则将全部失效,不再控制工作负载的通信行为。 |
