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 的组成,以及与其交互的对象。
![](https://img.haomeiwen.com/i26273155/410282fff275daf1.png)
我们可以使用 nsenter
命令进入Bookinfo 示例的 productpage
Pod的网络空间,查看其内部监听的端口信息。
![](https://img.haomeiwen.com/i26273155/165fa97f7f22ecf3.png)
从图中我们可以看到除了 productpage
应用本身监听的 9080 端口以外,Sidecar 容器还有监听大量的其他端口,如 15000
、15001
、15004
、15006
、15021
、15090
等,你可以在 Istio 文档 上了解 Istio 中使用的端口。
我们再进入 productpage
Pod 中,使用 lsof -i
命令查看它打开的端口,如下图所示。
![](https://img.haomeiwen.com/i26273155/4e28d11e732ef73f.png)
我们可以看到其中有 pilot-agent
与 istiod
建立了 TCP 连接,上文中所述的监听中的端口,还有在 Pod 内部建立的 TCP 连接,这些连接对应了文章开头的示意图。
Sidecar 容器(istio-proxy
)的根进程是 pilot-agent
,启动命令如下图所示:
![](https://img.haomeiwen.com/i26273155/38d4d4301a80b460.png)
从图中我们可以看到,它 pilot-agent
进程的 PID 是 1,是它拉起了 envoy
进程。
在 istiod
的 Pod 中查看它打开的端口,如下图所示。
![](https://img.haomeiwen.com/i26273155/0ec5dcba744c9d25.png)
我们可以看到其中的监听的端口、进程间和远程通信连接。
Istio 中各端口的功能概述
这些端口在你进行问题排查时可以起着举足轻重的作用。下面将根据端口所在的组件和功能分类描述。
Istiod 中的端口
Istiod 中的端口相对比较少且功能单一:
- 9876:ControlZ 用户界面,暴露
istiod
的进程信息 - 8080:
istiod
调试端口,通过该端口可以查询网格的配置和状态信息 - 15010:暴露 xDS API 和颁发纯文本证书
- 15012:功能同 15010 端口,但使用 TLS 通信
- 15014:暴露控制平面的指标给 Prometheus
- 15017:Sidecar 注入和配置校验端口
Sidecar 中的端口
从上文中,我们看到 sidecar 中有众多端口:
- 15000:Envoy 管理接口,你可以用它来查询和修改 Envoy 代理的的配置,详情请参考 Envoy 文档 。
- 15001:用于处理出站流量。
- 15004:调试端口,将在下文中解释。
- 15006:用于处理入站流量。
- 15020:汇总统计数据,对 Envoy 和 DNS 代理进行健康检查,调试
pilot-agent
进程,将在下文中详细解释。 - 15021:用于 sidecar 健康检查,以判断已注入 Pod 是否准备好接收流量。我们在该端口的
/healthz/ready
路径上设置了就绪探针,Istio 把 sidecar 的就绪检测交给了kubelet
,最大化利用 Kubernetes 平台自身的功能。envoy
进程将健康检查路由到pilot-agent
进程的 15020 端口,实际的健康检查将发生在那里。 - 15053:本地 DNS 代理,用于解析 Kubernetes DNS 解析不了的集群内部域名的场景。
- 15090:Envoy Prometheus 查询端口,
pilot-agent
将通过此端口收集统计信息。
以上端口可以分为以下几类:
- 负责进程间通信,例如 15001、15006、15053
- 负责健康检查和信息统计,例如 150021、15090
- 调试:15000、15004
下文将对几个重点端口详解。
15000 端口
15000 是 Envoy 的 Admin 接口,该接口允许我们修改 Envoy,并获得一个视图和查询指标和配置。
管理接口由一个具有多个端点的 REST API 和一个简单的用户界面组成,你可以使用下面的命令开启 productpage
Pod 中的 Envoy 管理接口视图。
kubectl -n default port-forward deploy/productpage-v1 15000
在浏览器中访问 http://localhost:15000
,你将看到 Envoy Admin 界面如下图所示。
![](https://img.haomeiwen.com/i26273155/f04c118fd074c525.png)
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
,你将看到调试端点,如下图所示。
![](https://img.haomeiwen.com/i26273155/7628615ed8762482.png)
当然,这只是一种获取网格信息和调试网格的方式,你还可以使用 istioctl
命令或 Kiali 来调试,那样将更加高效和直观。
15020 端口
15020 端口有三大功能:
- 汇总统计数据:查询 15090 端口获取
envoy
的指标,也可以配置查询应用程序的指标,将envoy
、应用程序和自身的指标汇总以供 Prometheus 收集。对应的调试端点是/stats/prometheus
。 - 对 Envoy 和 DNS 代理进行健康检查:对应的调试端点是
/healthz/ready
和/app-health
。 - 调试
pilot-agent
进程:对应的调试端点是/quitquitquit
、debug/ndsz
和/debug/pprof
。
下图展示的是使用本地端口转发后,在浏览器中打开 http://localhost:15020/debug/pprof
看到的调试信息。
![](https://img.haomeiwen.com/i26273155/9598797bc3365d45.png)
图中信息展示的是 pilot-agent
的堆栈信息。
总结
通过对 Istio 中各组件端口的了解,你应该对 Istio 中各组件的关系及其内部流量有了更进一步的认识,熟悉这些端口的功能,有助于对网格的故障排除
网友评论