already

Istio 组件常用端口

2023-01-03  本文已影响0人  程序员札记

Istio 组件常用端口

端口 协议 使用者 描述
8060 HTTP Citadel GRPC 服务器
8080 HTTP Citadel agent SDS service 监控
9090 HTTP Prometheus Prometheus
9091 HTTP Mixer 策略/遥测
9876 HTTP Citadel, Citadel agent ControlZ 用户界面
9901 GRPC Galley 网格配置协议
15000 TCP Envoy Envoy 管理端口 (commands/diagnostics)
15001 TCP Envoy Envoy 传出
15006 TCP Envoy Envoy 传入
15004 HTTP Mixer, Pilot 策略/遥测 - mTLS
15010 HTTP Pilot Pilot service - XDS pilot - 发现
15011 TCP Pilot Pilot service - mTLS - Proxy - 发现
15014 HTTP Citadel, Citadel agent, Galley, Mixer, Pilot, Sidecar Injector 控制平面监控
15020 HTTP Ingress Gateway Pilot 健康检查
15029 HTTP Kiali Kiali 用户界面
15030 HTTP Prometheus Prometheus 用户界面
15031 HTTP Grafana Grafana 用户界面
15032 HTTP Tracing Tracing 用户界面
15443 TLS Ingress and Egress Gateways SNI
15090 HTTP Mixer Proxy
42422 TCP Mixer 遥测 - Prometheus

Istio 中的组件及端口示意图

按照习惯,我们首先展示一个全局示意图。下图展示的是 Istio 数据平面中 sidecar 的组成,以及与其交互的对象。

Istio sidecar 组成示意图

我们可以使用 nsenter 命令进入Bookinfo 示例的 productpage Pod的网络空间,查看其内部监听的端口信息。

image.png

从图中我们可以看到除了 productpage 应用本身监听的 9080 端口以外,Sidecar 容器还有监听大量的其他端口,如 150001500115004150061502115090 等,你可以在 Istio 文档 上了解 Istio 中使用的端口。

我们再进入 productpage Pod 中,使用 lsof -i 命令查看它打开的端口,如下图所示。

image.png

我们可以看到其中有 pilot-agentistiod 建立了 TCP 连接,上文中所述的监听中的端口,还有在 Pod 内部建立的 TCP 连接,这些连接对应了文章开头的示意图。

Sidecar 容器(istio-proxy )的根进程是 pilot-agent,启动命令如下图所示:

image.png

从图中我们可以看到,它 pilot-agent 进程的 PID 是 1,是它拉起了 envoy 进程。

istiod 的 Pod 中查看它打开的端口,如下图所示。

image.png

我们可以看到其中的监听的端口、进程间和远程通信连接。

Istio 中各端口的功能概述

这些端口在你进行问题排查时可以起着举足轻重的作用。下面将根据端口所在的组件和功能分类描述。

Istiod 中的端口

Istiod 中的端口相对比较少且功能单一:

Sidecar 中的端口

从上文中,我们看到 sidecar 中有众多端口:

以上端口可以分为以下几类:

下文将对几个重点端口详解。

15000 端口

15000 是 Envoy 的 Admin 接口,该接口允许我们修改 Envoy,并获得一个视图和查询指标和配置。

管理接口由一个具有多个端点的 REST API 和一个简单的用户界面组成,你可以使用下面的命令开启 productpage Pod 中的 Envoy 管理接口视图。

kubectl -n default port-forward deploy/productpage-v1 15000

在浏览器中访问 http://localhost:15000,你将看到 Envoy Admin 界面如下图所示。

Envoy Admin 界面

15004 端口

通过 pilot-agent 代理 istiod 8080 端口上的调试端点,你可以进入数据平面 Pod 中访问 localhost 的 15004 端口查询网格信息,其效果与下面的 8080 端口等同。

8080 端口

你还可以在本地转发 istiod 8080 端口,请运行下面的命令。

kubectl -n istio-system port-forward deploy/istiod 8080

在浏览器中访问 http://localhost:8080/debug,你将看到调试端点,如下图所示。

Pilot 调试控制台

当然,这只是一种获取网格信息和调试网格的方式,你还可以使用 istioctl 命令或 Kiali 来调试,那样将更加高效和直观。

15020 端口

15020 端口有三大功能:

  1. 汇总统计数据:查询 15090 端口获取 envoy 的指标,也可以配置查询应用程序的指标,将 envoy、应用程序和自身的指标汇总以供 Prometheus 收集。对应的调试端点是 /stats/prometheus
  2. 对 Envoy 和 DNS 代理进行健康检查:对应的调试端点是 /healthz/ready/app-health
  3. 调试 pilot-agent 进程:对应的调试端点是 /quitquitquitdebug/ndsz/debug/pprof

下图展示的是使用本地端口转发后,在浏览器中打开 http://localhost:15020/debug/pprof 看到的调试信息。

pprof 端点

图中信息展示的是 pilot-agent 的堆栈信息。

总结

通过对 Istio 中各组件端口的了解,你应该对 Istio 中各组件的关系及其内部流量有了更进一步的认识,熟悉这些端口的功能,有助于对网格的故障排除

上一篇 下一篇

猜你喜欢

热点阅读