管理网关
服务网关包括入口网关和出口网关,用于管理服务网格的入站和出站流量,让您指定允许进入或离开网格的流量。
您可通过在集群中部署新的网关满足更加丰富的入站和出站流量管理需求:
-
网格下业务划分不同的区域,业务区域之间网络完全隔离。
-
让特定的业务独占网关,确保通过网关访问的性能、安全。
-
让大流量业务系统独占端口,确保不会因为业务系统的请求流量过大造成端口阻塞,导致通过网关访问其他业务系统时访问异常。
部署新网关
在服务网格纳管的集群中部署入口网关或出口网关,可为集群下所有命名空间中的服务提供相应的网关服务。
前提条件
如需部署高可用的入口网关,请您提前为部署入口网关的节点绑定 VIP(Virtual IP)和负载均衡。
操作步骤
-
在左侧导航栏中,单击 服务网格 > 网格列表。
-
单击待部署网关的 服务网格的名称。
-
在 网关列表 页签下,选择要部署网关的集群并单击 部署新网关。
-
参考以下说明,配置相关参数。
-
部署配置
参数 说明 网关类型 入口网关:定义了所有入站流量流经服务网格的入口点,用于治理网格边缘的入站流量,并对其进行路由编排。
出口网关:定义了服务网格出站流量的出口点。网格内注册的外部服务可绑定到出口网关,使得对外访问流量从出口网关定点发出。命名空间 仅用于部署网关组件的命名空间,可选当前集群关联的项目(包括系统项目)下无服务的命名空间。
注意:
- 为确保网关升级可控,请勿将网关与服务部署在同一命名空间下。否则,网格的控制平面升级后,网关会随着网关 Pod 重启而自动升级,可能会影响业务的正常运行。
- 网关组件运行会占用所选命名空间中的资源,请选择资源充足的命名空间。
- 当 网关类型 为入口网关
时,网关创建成功后,默认会被分配给部署该网关的命名空间所在项目使用。如需分配给其他项目使用,请参考 将入口网关分配给项目使用 操作。节点反亲和 Kubernetes 会根据 节点反亲和 设置将网关 Pod 调度至符合条件的 部署节点。通过为网关组件设置 节点反亲和 属性,可避免或尽量避免流量被负载至不存在网关组件 Pod 的节点。
强制:确保所选的每个 部署节点 上都存在网关组件的 Pod。
期望:Kubernetes 会根据调度算法,尽力将网关组件的 Pod 均匀地调度在所选的 部署节点 上,但无法保证每个节点上都会存在网关组件的 Pod。
说明:当集群中存在多个网关组件 Pod 时,负载均衡会根据记录在负载列表中的节点的 NodePort 将流量负载至网关部署节点。部署节点 定点部署网关组件的节点,部署组件时,仅可将组件的 Pod 调度在选定的节点上。 实例数 期望运行组件的 Pod 个数,请依据实际的业务请求量设置。 自动扩缩容 是否启用组件自动扩缩容功能。
开启后,需要设置自动扩缩容区间(实例数的 最小值、最大值),系统会根据组件需要处理的业务请求量自动扩缩组件的 Pod 个数。资源配额 组件的每个容器实例创建时的资源(CPU、内存)请求值(requests),同时也是容器可用资源的限制值(limits)。请结合实际的业务量和实例数合理设置。 固定 IP 当集群的网络模式为 Kuber-OVN 或 Calico 且已为部署网关的命名空间配置了子网时,可分配子网内未被使用的 IP 作为网关组件 Pod 的固定 IP;不设置时,则会为组件 Pod 随机分配子网内的可用 IP。
为网关配置固定 IP 后,网关升级、更新等操作引起组件 Pod 重启时,可保证组件 Pod IP 不变,方便集群内组件之间进行网络通信。
注意:为保证网关组件的 Pod 都能分配到 IP 后正常启动,请保证您输入的固定 IP 个数大于或等于网关组件的 实例数。 -
网关日志
参数 说明 日志级别 日志输出的优先级,可基于级别控制日志的输出范围。在网关运行过程中,仅输出选定级别及以上级别的日志,节省存储资源,提升基于日志排查问题的效率。
日志级别从低到高依次为:trace < debug < info < warning < error < critical < off,优先级说明请参考 日志级别 。
例如:日志级别为 error 时,仅输出 error、critical、off 级别的日志。采集访问日志 是否采集并在 网关日志 中输出 Web 服务访问网关的访问日志(access log)。
访问日志中记录了所有发送到网关的请求的详细信息,包括请求时间、客户端 IP 地址、请求路径和服务器响应等。网关作为服务网格流量的出/入口,承载着海量的访问请求。当您的业务出现问题时,您可通过查看网关的访问日志,分析客户端用户的访问行为,快速定位、排查问题。日志级别
日志级别 描述 off 关闭:最高级别,不打印日志。 critical 致命:指明非常严重的可能会导致应用终止执行错误事件。 error 错误:指明错误事件,但应用可能还能继续运行。 warning 警告:指明可能潜在的危险状况。 info 信息:指明描述信息,从粗粒度上描述了应用运行过程。 debug 调试:指明细致的事件信息,对调试应用最有用。 trace 跟踪:指明程序运行轨迹,比 debug 级别的粒度更细。 -
端口规划
参数 说明 外网访问 仅当网关类型为 入口网关 时,该参数有效。
是否允许集群外流量通过访问部署入口网关的节点的 NodePort 访问该网关。
不开启时,外部流量可通过 ClusterIP 或负载均衡器访问网关。
提示:网关部署成功后,不可更新该参数。监听端口 网关监听的端口及对应的协议,网关通过监听端口和对应协议来接收客户端的连接请求。
快速添加:
您仅需设置需要监听的 端口数量,部署网关时,平台会根据协议及设置的端口数量(组)自动为您规划要监听的端口列表。
端口规划规则:
- HTTP:起始为 80,随后从 7000、7001 … 等差递增;
- HTTPS:起始为 443,随后从 8000、8001 … 等差递增;
- TCP:从 9000、9001 … 等差递增。
自定义(仅入口网关):可根据实际需要添加网关的服务端口和容器端口(主机端口由 Kubernetes 自动分配),存在以下输入限制。
- 容器端口 不小于1024
。
- 不允许添加被 Istio 占用的 容器端口,包括:15000、15001、15004、15006、15008、15009、15020、15021、15053、15090
。
- 服务端口 不能重复。
-
-
单击 创建。
说明:网关部署成功后,网关名称中会包含随机生成的字符串后缀,例如:<名称>-prz2b
。
克隆网关
通过克隆网关,可快速基于服务网格纳管的其他集群下已有的网关的配置在当前集群下创建一个网关。
约束与限制
-
服务网格至少纳管了 2 个集群。
-
仅允许服务网格下,关联了同一项目且有同名命名空间的集群互相克隆网关。克隆出的网关与被克隆的网关,所在项目及所在命名空间同名,网关名称相似(名称后缀不同)。
-
相同的网关,只能在同一集群下克隆一次。
操作步骤
-
在左侧导航栏中,单击 服务网格 > 网格列表。
-
单击待克隆网关的 服务网格的名称。
-
在 网关列表 页签下,选择要克隆网关的集群并单击 部署网关 右侧的
> 克隆网关。
-
选择待克隆的网关所在集群、网关名称后,参考 部署新网关 ,配置相关参数。
-
单击 确定。
将入口网关分配给项目使用
入口网关对未分配其使用权限的项目不可见。通过 分配项目,可将 入口网关 分配给与当前集群关联的项目使用。
提示:入口网关默认会被分配给部署了该网关的命名空间所在项目使用,且不可取消分配。
操作步骤
-
在左侧导航栏中,单击 服务网格 > 网格列表。
-
单击待分配给项目的入口网关所在 服务网格的名称。
-
在 网关列表 页签下,选择待分配网关所在集群并单击 网关的名称。
-
在 网关详情 页签下,单击右上角的 操作 > 分配项目。
-
选择允许使用当前入口网关的项目,或取消选择已分配的项目。
注意:收回(取消分配)项目对入口网关的使用权限后,项目下基于当前入口网关创建的网关入口仍可正常使用。
-
单击 更新。
删除网关端口
支持删除网关已监听的端口,端口删除后,网关将无法再监听该端口的流量。
不支持删除:
-
已被网关入口占用的入口网关的端口
-
已绑定了外部服务的出口网关的端口
操作步骤
-
在左侧导航栏中,单击 服务网格 > 网格列表。
-
单击待删除端口网关所在 服务网格的名称。
-
在 网关列表 页签下,选择要删除监听端口的网关所在集群并单击 网关的名称。
-
在 网关详情 页签下,单击右上角的 操作 > 删除端口。
-
依次单击待删除端口右侧的
> 删除。
-
单击 确定。
网关监控
网关部署成功后,为了确保网关稳定运行,平台结合运维中心的能力(监控、告警、事件、日志)对网关进行了全方位的监控。您可通过网关监控页面展示的监控数据,实时了解网关的运行情况。
监控数据操作说明
-
刷新数据:当前页面的告警历史、事件及监控趋势统计数据,仅在页面打开时自动刷新一次,如需再次刷新,可通过以下两种方式实现:
-
手动刷新:通过单击页面右下角的
手动刷新数据;
-
设置自动刷新(默认关闭):单击
设置自动刷新数据的时间间隔。
-
-
查看/设置图例:单击图表右上角
可展开监控图表中的图例,单击图例,可隐藏/显示图表中图例对应的曲线。
-
调整内置告警阈值:单击图表右上角
可更新平台内置告警策略(CPU/内存使用率)的告警阈值。
网关内置告警策略
网关部署成功时,平台会自动为网关创建内置告警策略,监控指标涵盖网关实例健康程度、CPU/内存使用率,当相应指标的监控数据满足告警规则的触发条件时,可自动触发告警。
您可前往 运维中心(或 Service Mesh 平台 中网关所在命名空间的 告警 > 告警策略 页面)查看网关的内置告警并为其配置通知策略。配置通知策略后,告警触发时,系统会主动向您发送告警通知,以便您及时定位、解决问题。
提示:单击 网关监控 页签右侧的 内置告警策略说明,可查看平台内置的网关告警策略及其详细信息。支持在对应的监控图表中修改 CPU/内存的告警阈值。
监控指标说明
监控指标 | 说明 |
---|---|
实例状态 | 网关实例(Pod)的总数、健康个数、异常个数。 |
实时告警 | 与网关实例相关的,不同告警等级的正在告警的告警规则个数。 告警总数 > 0 时,可单击 ![]() |
告警历史 | 查询时间范围内,与网关实例相关的告警历史记录个数。单击 查看更多 可前往 运维中心 查看告警历史的详细信息。 提示:您可在 告警历史 页面通过设置集群、告警策略等查询条件,查询网关的告警历史。 |
事件 | 查询时间范围内,与网关实例相关的事件记录条数。单击 查看更多 可前往 运维中心 查看事件的详细信息。 提示:您可在 事件 页面通过设置资源类型、资源名称等查询条件,查询网关的事件。 |
CPU 使用率 | CPU 使用率 = 网关实例的 CPU 使用值 / 网关实例的 CPU 资源限额 单击图表右上角的 ![]() |
内存使用率 | 内存使用率 = 网关实例的内存使用值 / 网关实例的内存资源限额 单击图表右上角的 ![]() |
QPS | QPS(Queries Per Second)指服务器在一秒内处理的请求(通常指 HTTP 请求)数,数字越大代表服务器的负荷越高、处理能力越强。 |
连接数 | 连接数指客户端向服务端发起请求后,每秒钟服务器链接的 HTTP 和 TCP 请求总数,值越大代表服务器的处理能力越强。 |
传入流量 | HTTP 和 TCP 服务流量的传入总数。 |
传出流量 | HTTP 和 TCP 服务流量的传出总数。 |
网关日志
提示:网关日志在平台上的保留时间可通过 运维中心的日志策略 设置。
分析访问日志
开启网关的 采集访问日志 开关后,在网关日志中,可查看 Web 服务访问网关的访问日志。
接下来,将以下述示例,为您说明访问日志记录的信息。
访问日志的格式如下:
[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS%
\"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\"
\"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n
示例:
2022-10-14 [2022-10-14T09:20:59.000Z] "GET /notfound HTTP/1.1" 404 - via_upstream - "-" 0 10 14 13 "-" "curl/7.29.0" "2f76bda0-f06b-91b0-a96f-5aead910e5d3" "10.11.172.161" "10.10.0.204:80" inbound|80|| 127.0.0.6:41864 10.10.0.204:80 10.44.1.23:37652
字段 | 说明 |
---|---|
[%START_TIME%] | 请求开始(HTTP)或下游连接开始(TCP)的时间,为 UTC 格式时间。 格式如: YYYY-MM-DD [YYYY-MM-DDThh:mm:sssZ] ,示例中的时间为 2022 年 10 月 14 日 9 点 20 分 59 秒 。 |
\"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" | 客户端请求的方法、资源、协议。例如:"GET /notfound HTTP/1.1" 。 |
%RESPONSE_CODE% | HTTP 状态码。例如:404 。说明:状态码为 0 表示服务器从未发送过响应数据。 |
%RESPONSE_FLAGS% | 响应或者连接的附加信息。 默认为 - 。 |
%RESPONSE_CODE_DETAILS% | HTTP 状态码的附加详情。 例如: via_upstream 。 |
%CONNECTION_TERMINATION_DETAILS% | 连接终端的详情。 默认为 - 。 |
\"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" | 上游传输失败的原因。 默认为 - 。 |
%BYTES_RECEIVED% | 接收到的消息体字节数(HTTP),或在连接上从下游接收到的字节数(TCP)。 例如: 0 。 |
%BYTES_SENT% | 发送出去的消息体字节数(HTTP),或在连接上发送给下游的字节数(TCP)。 例如: 10 。 |
%DURATION% | 请求从起始时间到最后一个字节发出的持续总时长(HTTP),或下游连接的持续总时长(TCP)。 单位:毫秒。例如: 14 。 |
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% | 上游服务耗时。单位:毫秒。例如:13 。 |
\"%REQ(X-FORWARDED-FOR)%\" | HTTP 请求头字段。用于识别通过 HTTP 代理或负载均衡方式连接到服务器的客户端的原始 IP 地址。 默认为 "-" 。 |
\"%REQ(USER-AGENT)%\" | User-Agent 请求头的值。可用于辨别用户是使用什么工具来发起请求的。 例如: "curl/7.29.0" 。 |
\"%REQ(X-REQUEST-ID)%\" | X-REQUEST-ID 请求头的值,表示请求 id。 例如: "2f76bda0-f06b-91b0-a96f-5aead910e5d3" 。 |
\"%REQ(:AUTHORITY)%\" | :AUTHORITY 请求头的值,是一个 Host,即客户端在尝试连接到服务时使用的地址。用于鉴权。 例如: "10.11.172.161" 。 |
\"%UPSTREAM_HOST%\" | 上游主机的 URL。 例如: "10.10.0.204:80" 。 |
%UPSTREAM_CLUSTER% | 上游主机所属的上游集群。 例如:`inbound |
%UPSTREAM_LOCAL_ADDRESS% | 上游服务的本地地址。 例如: 127.0.0.6:41864 。 |
%DOWNSTREAM_LOCAL_ADDRESS% | 下游服务的本地地址。 例如: 10.10.0.204:80 。 |
%DOWNSTREAM_REMOTE_ADDRESS% | 下游服务的远程地址。 例如: 10.44.1.23:37652 。 |
%REQUESTED_SERVER_NAME% | 被请求的服务的名称。 |
%ROUTE_NAME% | 路由的名称。 默认为 default 。 |