• Istio Service Entry介绍


    目录

    ServiceEntry.Resolution 解析模式

    STATC模式

    场景一:将http地址:httpbin.org:80 解析到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

    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

    1. apiVersion: networking.istio.io/v1beta1
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-httpbin-tcp
    5. namespace: default
    6. spec:
    7. endpoints:
    8. - address: 192.168.1.1
    9. ports:
    10. http: 8080
    11. hosts:
    12. - httpbin.org
    13. location: MESH_EXTERNAL
    14. ports:
    15. - name: http
    16. number: 80
    17. protocol: HTTP
    18. resolution: STATIC

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

    1. apiVersion: networking.istio.io/v1beta1
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-httpbin-tcp
    5. namespace: default
    6. spec:
    7. endpoints:
    8. - address: 192.168.1.1
    9. ports:
    10. http: 8080
    11. hosts:
    12. - httpbin.org
    13. addresses:
    14. - 44.194.145.111/32 #httpbin.org的地址
    15. - 44.194.145.111/32
    16. location: MESH_EXTERNAL
    17. ports:
    18. - name: tcp
    19. number: 8080
    20. protocol: TCP
    21. resolution: STATIC

    DNS模式

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

    1. apiVersion: networking.istio.io/v1beta1
    2. kind: ServiceEntry
    3. metadata:
    4. generation: 1
    5. name: httpbin-svc-http
    6. namespace: default
    7. spec:
    8. hosts:
    9. - httpbin.org
    10. location: MESH_EXTERNAL
    11. ports:
    12. - name: http
    13. number: 80
    14. protocol: http
    15. resolution: DNS

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

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-dns
    5. spec:
    6. hosts:
    7. - httpbin.org
    8. location: MESH_EXTERNAL
    9. ports:
    10. - number: 80
    11. name: http
    12. protocol: HTTP
    13. resolution: DNS
    14. endpoints:
    15. - address: 192.168.1.1
    16. ports:
    17. http: 8080
    18. - address: 192.168.1.2
    19. ports:
    20. http: 8080
    21. - address: 192.168.1.3
    22. ports:
    23. http: 8080

    NONE模式

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

    1. apiVersion: networking.istio.io/v1beta1
    2. kind: ServiceEntry
    3. metadata:
    4. name:ip-svc-http
    5. namespace: default
    6. spec:
    7. addresses:
    8. - 192.168.1.1/32
    9. hosts:
    10. - 192.168.1.1
    11. location: MESH_EXTERNAL
    12. ports:
    13. - name: http
    14. number: 80
    15. 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

    控制服务条目的可见性

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

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

  • 相关阅读:
    PHP & MySQL图解学习指南:开启Web开发新篇章
    AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
    SSO 系统设计_token 生成
    【CSDN竞赛第11期】编程竞赛总结
    如何判断对象是否该被回收(引用计数法、可达性分析算法)
    【Leetcode】单链表 ---移除链表元素(创建虚拟头节点)
    【小程序项目开发 -- 京东商城】uni-app 商品分类页面(下)
    【深度学习】第三章:卷积神经网络
    《向量数据库指南》——Range Search 的技术实现细节
    没错,请求DNS服务器还可以使用UDP协议
  • 原文地址:https://blog.csdn.net/qq_36464836/article/details/133949966