当前位置: 首页 > news >正文

istio-proxy用哪个端口代理http流量的?

在 Istio 中,istio-proxy(基于 Envoy)代理 HTTP 流量的端口取决于具体配置和服务类型。以下是以 Markdown 格式整理的详细说明,涵盖 istio-proxy 如何处理 HTTP 流量以及相关端口信息:

istio-proxy 代理 HTTP 流量的端口

1. 默认端口

istio-proxy 使用 iptables 规则直接配置 来拦截和代理应用的流量。HTTP 流量的代理端口通常包括以下几种情况:

  • 出站流量(Outbound)

    • 默认情况下,istio-proxy 拦截 Pod 的出站 HTTP 流量(通常是 80 或 8080 端口),并将其重定向到 15001 端口(Envoy 的默认出站端口)。
    • 例如,应用发起的 HTTP 请求(目标为某个服务的 80 端口)会被重定向到 istio-proxy 的 15001 端口处理。
  • 入站流量(Inbound)

    • 对于入站 HTTP 流量,istio-proxy 默认监听 15006 端口,然后根据服务的目标端口(例如 80 或 8080)进行转发。
    • 具体目标端口由 Kubernetes Service 的 porttargetPort 定义。例如,Service 定义的端口是 80,istio-proxy 会将入站流量从 15006 转发到应用的实际端口(如 8080)。
  • 服务定义的端口

    • 如果 Kubernetes Service 配置了特定端口(如 80、443、8080 等),istio-proxy 会根据 VirtualServiceDestinationRule 的配置,代理这些端口的 HTTP 流量。
    • 例如,VirtualService 中定义的 http 路由会指定目标服务的端口(如 host: reviews.default.svc.cluster.local, port: 9080)。

2. 如何确认代理的端口

可以通过以下方法查看 istio-proxy 代理 HTTP 流量的具体端口:

方法 1:检查 istio-proxy 的监听端口

istio-proxy 容器中运行以下命令,查看 Envoy 监听的端口:

kubectl exec -it <pod-name> -n <namespace> -c istio-proxy -- netstat -tuln

或使用更现代的 ss 命令:

kubectl exec -it <pod-name> -n <namespace> -c istio-proxy -- ss -tuln

输出示例:

Netid  State      Recv-Q Send-Q  Local Address:Port   Peer Address:Port
tcp    LISTEN     0      128     0.0.0.0:15001        0.0.0.0:*
tcp    LISTEN     0      128     0.0.0.0:15006        0.0.0.0:*
tcp    LISTEN     0      128     0.0.0.0:15021        0.0.0.0:*
  • 15001:出站流量监听端口(包括 HTTP 流量)。
  • 15006:入站流量监听端口(包括 HTTP 流量)。
  • 15021:健康检查端口(非 HTTP 流量相关)。
方法 2:查看 Envoy 配置

使用 istioctl 查看 Envoy 的集群和监听器配置,确认 HTTP 流量的端口:

istioctl proxy-config listener <pod-name>.<namespace> -o json

查找 port 字段,筛选与 HTTP 相关的监听器(通常绑定到 15001 或 15006)。输出示例:

{"name": "0.0.0.0_15001","address": {"socketAddress": {"address": "0.0.0.0","portValue": 15001}},"filterChains": [{"filters": [{"name": "envoy.filters.network.http_connection_manager"}]}]
}

这里的 envoy.filters.network.http_connection_manager 表示该监听器处理 HTTP 流量。

方法 3:检查 Kubernetes Service 和 VirtualService

HTTP 流量的目标端口通常由 Kubernetes Service 和 VirtualService 定义。查看 Service 配置:

kubectl get service <service-name> -n <namespace> -o yaml

输出示例:

apiVersion: v1
kind: Service
spec:ports:- name: httpport: 80targetPort: 8080

再检查 VirtualService 配置:

kubectl get virtualservice -n <namespace> -o yaml

输出示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
spec:hosts:- reviews.default.svc.cluster.localhttp:- route:- destination:host: reviews.default.svc.cluster.localport:number: 9080

这里,HTTP 流量被路由到 reviews 服务的 9080 端口,而 istio-proxy 会在 15001(出站)或 15006(入站)处理这些流量。

方法 4:通过 Envoy 管理接口

访问 Envoy 管理接口查看实时监听端口:

kubectl exec -it <pod-name> -n <namespace> -c istio-proxy -- curl -s http://localhost:15000/listeners

输出会列出所有监听器,查找与 HTTP 流量相关的监听器(通常绑定到 15001 或 15006)。

3. 典型场景说明

  • 出站 HTTP 流量

    • 应用发起的 HTTP 请求(例如访问 http://reviews:9080)被 iptables 规则重定向到 istio-proxy15001 端口。
    • istio-proxy 再根据 VirtualServiceDestinationRule 将请求转发到目标服务的正确端口。
  • 入站 HTTP 流量

    • 外部请求到达 Pod 时(例如通过 Service 的 80 端口),被重定向到 istio-proxy15006 端口。
    • istio-proxy 根据配置转发到应用的实际端口(如 8080)。
  • HTTPS 流量

    • 如果是 HTTPS 流量(通常 443 端口),istio-proxy 仍使用 15006(入站)或 15001(出站)代理,但会处理 TLS 终止或透传,具体取决于 DestinationRuletls 配置。

4. 注意事项

  • iptables 重定向:Istio 使用 iptables 规则将流量重定向到 istio-proxy,因此应用本身可能感知不到 15001 或 15006 端口,而是直接与 Service 端口交互。

  • 自定义端口:如果服务使用非标准端口(例如 8080、9090),需要在 VirtualService 中明确指定目标端口。

  • 多协议支持istio-proxy 不仅代理 HTTP/1.1,还支持 HTTP/2 和 gRPC,端口配置方式类似,但需确保 VirtualService 中的协议正确(httphttp2)。

  • 调试端口冲突:如果端口配置错误,可能导致流量无法正确路由。使用 istioctl analyze 检查配置是否正确:

    istioctl analyze -n <namespace>
    

5. 总结

  • 出站 HTTP 流量:通常通过 15001 端口代理。
  • 入站 HTTP 流量:通常通过 15006 端口代理。
  • 服务端口:实际 HTTP 端口由 Kubernetes Service 和 VirtualService 定义(如 80、8080 等)。
  • 查看方法:使用 netstatssistioctl proxy-config listener 或 Envoy 管理接口(curl http://localhost:15000/listeners)确认端口。
http://www.lryc.cn/news/597488.html

相关文章:

  • Vue 浏览器本地存储
  • 游戏盾 SDK 和游戏盾转发版有什么区别呢?​
  • Docker Desktop 打包Unity WebGL 程序,在Docker 中运行Unity WebGL 程序
  • SeaweedFS深度解析(二):从Master到Volume
  • 人工智能——Opencv图像色彩空间转换、灰度实验、图像二值化处理、仿射变化
  • AI项目实施落地实例
  • 直播一体机技术方案解析:基于RK3588S的硬件架构特性​
  • 如何加固Endpoint Central服务器的安全?(下)
  • 网络与信息安全有哪些岗位:(2)渗透测试工程师
  • JavaWeb_Servlet复习
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-6,(知识点:二极管,少子多子,扩散/漂移运动)
  • React Native + Expo 入坑指南:从核心概念到实战演练
  • LangChain面试内容整理-知识点29:LangChain与LlamaIndex等框架对比
  • 洛谷刷题7.23
  • Git 完全手册:从入门到团队协作实战(4)
  • 生命通道的智慧向导:Deepoc具身智能如何重塑医院导诊机器人的“仁心慧眼”
  • 沪银本周想法
  • Python 数据持久化存储:深入解析 JSON 与 Pickle 模块
  • 项目七.AI大模型部署
  • SCDN:网络安全新防线下的技术革新与安全效能
  • JS逆向基础( AES 解密密文WordArray和Uint8Array实战②)
  • iOS开发 Swift 速记5:高级运算符
  • 事务隔离级别和传播方式
  • 软件开发生命周期与模型解析:选择合适的开发方法
  • 什么是ARQ协议
  • 如何最简单、通俗地理解Python的numpy库?
  • C语言习题讲解-第五讲-循环编程练习等
  • Excel——设置打印的区域
  • CSS3文本阴影特效全攻略
  • 运营端账号管理设计指南:安全与效率的双重保障