Istio Service Entry介绍

目录

[ServiceEntry.Resolution 解析模式](#ServiceEntry.Resolution 解析模式)

STATC模式

[场景一:将http地址:httpbin.org:80 解析到192.168.1.1:8080](#场景一:将http地址:httpbin.org:80 解析到192.168.1.1:8080)

[场景二:将TCP地址:httpbin.org:8080 解析到192.168.1.1:8080](#场景二:将TCP地址:httpbin.org:8080 解析到192.168.1.1:8080)

DNS模式

场景一:服务网格内部访问外部地址httpbin.org

[场景二:将http地址:httpbin.org:80 解析到192.168.1.1:8080、192.168.1.2:8080、192.168.1.3:8080](#场景二:将http地址:httpbin.org:80 解析到192.168.1.1:8080、192.168.1.2:8080、192.168.1.3:8080)

NONE模式

场景:网格内服务访问外部服务192.168.1.1:80

ServiceEntry规则定义

hosts

addresses

endpoints

exportTo


ServiceEntry.Resolution 解析模式

我们添加服务条目时,选择合适的解析模式对管控流量十分重要

ServiceEntry.Resolution指定的解析模式不会影响应用程序解析与服务关联的 IP 地址的方式。应用程序可能仍然需要使用 DNS 将服务解析为 IP,以便捕获代理的出站流量。或者,对于 HTTP 服务,应用程序可以直接与代理通信(例如,通过设置 HTTP_PROXY)来与这些服务通信。

解析方式 描述
NONE 访问地址已被解析为IP。此类连接通常使用 IP 表 REDIRECT/eBPF 等机制通过代理进行路由。执行任何与路由相关的转换后,代理会将连接转发到该连接所绑定的 IP 地址。
STATIC 在访问域名中指定静态 IP 地址作为与服务通信。
DNS 尝试通过查询环境 DNS 来解析 IP 地址。如果未指定访问地址,并且未使用通配符,则代理将解析hosts字段中指定的 DNS 地址。如果指定了访问地址,则将解析地址中指定的 DNS 地址以确定目标 IP 地址。注意:DNS 解析不能与 Unix 域套接字端点一起使用。
DNS_ROUND_ROBIN 尝试通过异步查询环境 DNS 来解析 IP 地址。与DNS不同的是,DNS_ROUND_ROBIN仅使用需要发起新连接时返回的第一个 IP 地址,而不依赖于 DNS 解析的完整结果,并且即使 DNS 记录频繁更改,也将保留与主机的连接,从而消除了连接池的耗尽和连接循环。这最适合必须通过 DNS 访问的大型网络规模服务。如果不使用通配符,代理将解析主机字段中指定的 DNS 地址。DNS 解析不能与 Unix 域套接字端点一起使用。

STATC模式

场景一:将http地址:httpbin.org:80 解析到192.168.1.1:8080

复制代码
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: external-httpbin-tcp
  namespace: default
spec:
  endpoints:
    - address: 192.168.1.1
      ports:
        http: 8080
  hosts:
    - httpbin.org
  location: MESH_EXTERNAL
  ports:
    - name: http
      number: 80
      protocol: HTTP
  resolution: STATIC

场景二:将TCP地址:httpbin.org:8080 解析到192.168.1.1:8080

复制代码
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: external-httpbin-tcp
  namespace: default
spec:
  endpoints:
    - address: 192.168.1.1
      ports:
        http: 8080
  hosts:
    - httpbin.org
  addresses:
    - 44.194.145.111/32 #httpbin.org的地址
    - 44.194.145.111/32
  location: MESH_EXTERNAL
  ports:
    - name: tcp
      number: 8080
      protocol: TCP
  resolution: STATIC

DNS模式

场景一:服务网格内部访问外部地址httpbin.org

复制代码
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  generation: 1
  name: httpbin-svc-http
  namespace: default
spec:
  hosts:
    - httpbin.org
  location: MESH_EXTERNAL
  ports:
    - name: http
      number: 80
      protocol: http
  resolution: DNS

场景二:将http地址:httpbin.org:80 解析到192.168.1.1:8080、192.168.1.2:8080、192.168.1.3:8080

复制代码
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-dns
spec:
  hosts:
  - httpbin.org
  location: MESH_EXTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS
  endpoints:
  - address: 192.168.1.1
    ports:
      http: 8080
  - address: 192.168.1.2
    ports:
      http: 8080
  - address: 192.168.1.3
    ports:
      http: 8080

NONE模式

场景:网格内服务访问外部服务192.168.1.1:80

复制代码
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name:ip-svc-http
  namespace: default
spec:
  addresses:
    - 192.168.1.1/32
  hosts:
    - 192.168.1.1
  location: MESH_EXTERNAL
  ports:
    - name: http
      number: 80
  resolution: NONE

ServiceEntry规则定义

hosts

该字段必填

与 ServiceEntry 关联的访问地址。可以是带有通配符前缀的 DNS 名称。

  1. 主机字段用于在 VirtualServices 和 DestinationRules 中选择匹配的主机。
  2. 对于 HTTP 流量,HTTP Host/Authority 标头将与主机字段进行匹配。
  3. 对于包含服务器名称指示 (SNI) 的 HTTP 或 TLS 流量,SNI 值将与主机字段进行匹配。

**注 1:**当解析设置为 DNS 类型并且未指定端点时,主机字段将用作将流量路由到的端点的 DNS 名称。

addresses

该字段非必需

与服务关联的虚拟 IP 地址。可能是 CIDR 前缀。在 HTTP流量中,该字段被忽略。如果指定了一个或多个 IP 地址,如果目标 IP 与地址字段中指定的 IP/CIDR 匹配,则传入流量将被识别为属于此服务。

如果Addresses字段为空,则将仅根据目标端口来识别流量。在这种情况下,网格中的任何其他服务都不得共享访问服务的端口。换句话说,sidecar将充当一个简单的TCP代理,将指定端口上的传入流量转发到指定的目标端点IP/主机。'

此字段不支持Unix域套接字地址。

endpoints

与服务关联的网络地址。可以是域名也可以是IP

exportTo

控制服务条目的可见性

如果未指定命名空间,则默认情况下将服务条目推到所有命名空间。

如果设置为 "." ,声明服务条目只能在同一命名空间的生效。类似地,值"*"定义为在所有命名空间的生效。

相关推荐
小陈不好吃2 小时前
从单体到微服务:Spring Cloud Gateway 动态路由实战与踩坑记录
微服务·云原生·架构
Cx330❀2 小时前
【Linux网络】网络层协议 IP :从网络层原理到 Linux 内核源码
linux·运维·服务器·网络·tcp/ip·ai·ai编程
FPC工厂——皇榜科技4 小时前
机器人灵巧手线路板:从“握得住”到“摸得准”:一只机械手的柔性神经密码
网络·人工智能·科技·机器人·pcb工艺
Orange_sparkle5 小时前
Pi Agent vs LangGraph:从人机交互、企业 RAG 到持久化工作流的完整选型指南
java·网络·人机交互
云祺vinchin5 小时前
桌面云如何高效备份?某科技公司灾备建设实战
云原生·数据安全·数据备份·无代理备份·桌面云
xiaoye-duck5 小时前
《Linux 网络编程》深入传输层 UDP 协议原理:端口、报文、缓冲区与内核源码解析
linux·网络·udp
好评1246 小时前
【Linux】数据链路层
linux·运维·网络
天衍四九-6 小时前
第一章:从 LLM 到 Agent —— DeepSeek Harness 入门
网络·数据库·人工智能·python
Jae den6 小时前
网络丢包是什么?
网络
阿里云云原生7 小时前
从 NL2SQL 到自动巡检:乐檬如何打造面向多租户 SaaS 的全链路可观测性体系?
云原生