当前位置: 首页 > 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.dtcms.com/a/294822.html

相关文章:

  • 百度文心大模型ERNIE全面解析
  • 绿地集团携手深兰科技推动AI医诊大模型快速落地
  • AI产品经理面试宝典第48天:产品设计与用户体验优化策略
  • 从零解析DeepSeek Excel公式生成器的深度学习实现原理
  • Mybatis_1
  • Spring Bean初始化及@PostConstruc执行顺序
  • 零侵入加解密方案:Spring Boot + Jasypt + AOP实现敏感数据自动保护
  • Leetcode力扣解题记录--第54题(矩阵螺旋)
  • 表征工程中哪里用到内积 :内积vs余弦相似度--谁更胜一筹?
  • 智慧农业平台-农资农服农业数字化转型
  • 算法第三十七天:动态规划part05(第九章)
  • Golang各版本特性
  • 算法:数组part01:704. 二分查找 +977.有序数组的平方
  • ZeroMQ源码深度解析:高性能网络库的架构设计与性能优化
  • 高效编程革命:DeepSeek V3多语言支持与性能优化实战
  • 【前端】当前主流的 CSS 预处理器语言Sass / SCSS、Less、Stylus
  • C++:list(1)list的使用
  • HomeAssistant本地开发笔记
  • 「iOS」——KVO
  • MCP客户端架构与实施
  • SQL基础⑦ | 子查询
  • Linux——System V 共享内存 IPC
  • 【第十二章 W55MH32 NetBIOS示例标题】
  • ChatGPT桌面版深度解析
  • clientHeight(用于获取元素的可视高度)
  • 大致自定义文件I/O库函数的实现详解(了解即可)
  • 计算机网络学习----域名解析
  • uni-app平板端自定义样式合集
  • 【67】MFC入门到精通——MFC 销售管理系统 项目实现详细教程
  • 【自动化运维神器Ansible】深入解析Ansible Host-Pattern:精准控制目标主机的艺术