K8s 中Istio 的使用示例 [复制链接]
发表于 2025-12-4 15:09:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
要将你自己的进程接入 Istio 并从 Istio 中获取网络包,紧张依赖于 Istio 的Sidecar 注入Envoy Proxy 实现的流量署理机制。以下是具体的流程和实现思绪:

1. Istio Sidecar 注入原理


  • Istio 通过将 Envoy 作为一个 Sidecar 容器 注入到你的 Pod 中,使全部网络流量都颠末 Envoy 署理。
  • Envoy 负责拦截和转发来自 Pod 内部的 入站流量出站流量
  • 你自己的进程并不直接与 Istio 自己交互,而是通过与 Envoy 交互来间接实现网络控制和流量管理。

2. Sidecar 注入方式

你须要让 Istio 将 Envoy 署理注入到你的 Pod 中,有两种方式:

  • 自动注入:确保你的定名空间中启用了 istio-injection。
  1. kubectl label namespace <your-namespace> istio-injection=enabled
复制代码

  • 在此定名空间中摆设的 Pod 会自动注入 Sidecar。
  • 手动注入:使用 istioctl kube-inject 工具在你的 Pod 设置文件中注入 Envoy 署理。
  1. istioctl kube-inject -f your-deployment.yaml | kubectl apply -f -
复制代码

3. 怎样吸取网络包?

Istio 会将网络流量定向到 Envoy Proxy,而你的进程怎样获取网络包取决于你的具体需求:
A. 与 Envoy 通讯:实当署理层的哀求剖析


  • 监听流量

    • 你的进程可以监听一个端口(比方 localhostORT),Envoy 会将颠末署理的流量转发到你的进程。
    • 在 Envoy 设置中,通过 ListenerRoute 将特定的流量重定向到你指定的端口。

  • 应用层剖析

    • 假如是 HTTP/TCP 流量,你可以从监听端口上读取哀求数据包,然后举行剖析和处理处罚。
    • 比方:Envoy 设置 ServiceEntry 或 VirtualService,让哀求流量转发到你的进程。

B. 直接监听 Pod 网卡流量(高级用法)

假如你须要获取 原始网络包,可以使用更底层的方法:

  • 使用工具如 eBPF(Extended Berkeley Packet Filter) 或 tcpdump 监听 Pod 的网络接口。
  • eBPF 可以附加到 Pod 内的网络接口,用于捕获颠末 Pod 的网络包,恰当对网络流量举行深度分析。
  • 注意:这种方式较为底层,并不依赖 Envoy,而是直接抓取 Pod 网络层的数据。
示例:在 Pod 内部运行 tcpdump
  1. tcpdump -i eth0 -nn
复制代码
C. 通过 Envoy 统计和访问日志日志

Envoy 还支持输出丰富的 网络统计信息访问日志日志

  • 访问日志日志:通过设置 Envoy 的日志,可以将网络流量的哀求信息输出到文件或尺度输出。
  • Metrics 指标:Envoy 集成了 Prometheus,可以获取流量的及时统计数据。
  • 你的进程可以读取这些日志或指标,从而间接获取网络流量的干系信息。

4. 现实摆设示例

假设你有一个自界说服务 my-proxy,摆设在 Kubernetes 中,你的进程监听 127.0.0.1:8000。
步调:

  •         启用 Istio 自动注入
  1. kubectl label namespace default istio-injection=enabled
复制代码

  •         创建服务和 Deployment
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: my-proxy
  5. spec:
  6.   replicas: 1
  7.   selector:
  8.     matchLabels:
  9.       app: my-proxy
  10.   template:
  11.     metadata:
  12.       labels:
  13.         app: my-proxy
  14.     spec:
  15.       containers:
  16.         - name: my-proxy
  17.           image: my-proxy-image:latest
  18.           ports:
  19.             - containerPort: 8000
  20. ---
  21. apiVersion: v1
  22. kind: Service
  23. metadata:
  24.   name: my-proxy
  25. spec:
  26.   selector:
  27.     app: my-proxy
  28.   ports:
  29.     - port: 80
  30.       targetPort: 8000
复制代码
设置 Istio 流量转发

  • 使用 VirtualService 将外部流量导向你的服务 my-proxy。
  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4.   name: my-proxy
  5. spec:
  6.   hosts:
  7.     - "my-proxy.local"
  8.   http:
  9.     - route:
  10.         - destination:
  11.             host: my-proxy
  12.             port:
  13.               number: 80
复制代码

  •         读取流量

    • Envoy 将流量转发到你的服务监听的端口(比方 8000),你的进程可以直接处理处罚哀求数据包。


5. 注意事项


  • 流量捕获机制:Istio 使用 iptables 规则挟制流量并转发到 Envoy Proxy,以是你须要与 Envoy 交互而不是直接监听原始网络包。
  • 性能开销:Sidecar 容器会引入肯定的网络延长,假如你的进程对性能要求极高,可以思量轻量级的署理实现。
  • 安全:确保你的进程可以或许准确处理处罚 Istio 注入的流量,同时兼容 TLS 加密流量。

总结


  • 你的进程紧张通过 Envoy Proxy 吸取流量。Envoy 拦截 Pod 的入站和出站流量,并将其转发到你指定的端口。
  • 假如须要原始网络包,可以通过 eBPFtcpdump 直接监听 Pod 的网络接口。
  • 团结 VirtualServiceServiceEntry,可以控制 Envoy 怎样路由流量到你的进程。
  • Istio 的日志和指标输出也可以提供网络流量的具体信息,供你的进程分析。
根据需求选择符合的接入方式,可以有效实现网络包的获取与处理处罚。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表