在Service Mesh内访问网格外的服务

简介: 阿里云服务网格ASM提供了访问外部服务的三种方式,包含设置外部服务访问策略、配置ServiceEntry和设置拦截对外访问的网段。本文介绍如何在服务网格ASM上访问外部服务。

阿里云服务网格ASM提供了访问外部服务的三种方式,包含设置外部服务访问策略、配置ServiceEntry和设置拦截对外访问的网段。本文介绍如何在服务网格ASM上访问外部服务。

设置外部服务访问策略

您可以在服务网格ASM中设置对外部服务的访问策略OutboundTrafficPolicy,用于配置对外部服务(即未在Istio的内部服务注册表中定义的服务)的访问策略。

  • 如果该选项设置为REGISTRY_ONLY,则Sidecar代理将阻止任何没有在网格中定义了HTTP服务或集群外服务的主机。

  • 如果该选项设置为ALLOW_ANY,则Sidecar代理允许对未知服务的透传通过。优点是直接透传对外部服务的访问,缺点是失去了对外部服务流量的网格层面的监视和控制。

重要:
在ALLOW_ANY出口策略下,如果没有为外部服务定义ServiceEntry,Envoy代理将允许TCP流量离开网格到任何IP和端口。然而,这种方式缺乏明确的流量控制,可能导致意外的流量行为,尤其是当多个服务监听同一个端口时。对于访问外部服务(例如数据库),强烈不建议使用该方式,避免造成访问冲突。

建议您为外部服务定义ServiceEntry,显式地控制流量的目的地并避免潜在的问题和冲突。

具体操作如下:

  • 登录ASM控制台。在左侧导航栏,选择服务网格 > 网格管理。
  • 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
  • 在网格详情页面左侧导航栏,选择数据面组件管理 > Sidecar代理配置。
  • 在Sidecar代理配置页面全局页签下单击外部服务访问策略,设置对外部服务的访问策略OutboundTrafficPolicy为ALLOW_ANY,单击更新设置。

在注入了Sidecar代理的应用容器中,运行curl命令请求访问外部HTTP或HTTPS服务,可以看到正常返回结果。

访问外部HTTP服务

curl -I  http://www.aliyun.com/

预期输出:

HTTP/1.1 301 Moved Permanently
server: envoy
date: Mon, 07 Sep 2020 09:28:54 GMT
content-type: text/html
content-length: 239
location: https://www.aliyun.com/
eagleeye-traceid: 0be3e0a615994709353116335ea5ea
timing-allow-origin: *
x-envoy-upstream-service-time: 67

访问外部HTTPS服务

curl -I  https://www.aliyun.com/

预期输出:

HTTP/2 200
server: Tengine
date: Mon, 07 Sep 2020 09:16:31 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
vary: Accept-Encoding
strict-transport-security: max-age=31536000
x-download-options: noopen
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
x-readtime: 0
eagleeye-traceid: 0b57ff8715994701916963132ec7ad
strict-transport-security: max-age=0
timing-allow-origin: *

配置集群外服务(ServiceEntry)

如果设置对外部服务的访问策略OutboundTrafficPolicy为REGISTRY_ONLY,在注入了Sidecar代理的应用容器中,运行curl命令请求访问外部HTTP或HTTPS服务,可以看到不能正常返回结果。

访问外部HTTP服务。

curl -I  http://www.aliyun.com/

预期输出:

HTTP/1.1 502 Bad Gateway
date: Mon, 07 Sep 2020 09:25:58 GMT
server: envoy
transfer-encoding: chunked

访问外部HTTPS服务。

curl -I https://www.aliyun.com/

预期输出:

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to www.aliyun.com:443

您可以使用集群外服务(ServiceEntry)配置,从网格内访问网格外部的可公开访问的服务,同时保留Istio的流量监视和控制功能,实现对外部服务的受控访问。

具体操作如下:

  • 在网格详情页面左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry),然后在右侧页面,单击使用YAML创建。
  • 选择命名空间,将以下内容复制到文本框中,然后单击创建。

根据实际需求设置hosts,在本示例中hosts为www.aliyun.com。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: aliyun-com-ext
spec:
  hosts:
  - 'www.aliyun.com'
  ports:
  - number: 80
    name: http
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS  
  resolution: DNS
  location: MESH_EXTERNAL

访问外部HTTP或HTTPS服务,可以看到正常返回结果。

访问外部HTTP服务。

curl -I  http://www.aliyun.com/

预期输出:

HTTP/1.1 301 Moved Permanently
server: envoy
date: Mon, 07 Sep 2020 09:49:17 GMT
content-type: text/html
content-length: 239
location: https://www.aliyun.com/
eagleeye-traceid: 0be3e0a915994721583014504e7b31
timing-allow-origin: *
x-envoy-upstream-service-time: 66

访问外部HTTPS服务。

curl -I https://www.aliyun.com/

预期输出:

HTTP/2 200
server: Tengine
date: Mon, 07 Sep 2020 09:49:31 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
vary: Accept-Encoding
strict-transport-security: max-age=31536000
x-download-options: noopen
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
x-readtime: 1
eagleeye-traceid: 0be3e0b115994721709577294ed9e8
strict-transport-security: max-age=0
timing-allow-origin: *

设置网格拦截指定地址范围

设置指定的网格拦截IP范围,使得未被指定的其他IP范围不被网格内的Sidecar代理流量拦截,从而可以绕过Sidecar代理直接访问目标服务。

您可以在服务网格ASM中配置拦截对外访问的地址范围,设置流量被拦截的IP范围,通常设置为所管理的Kubernetes集群的Service CIDR。即访问集群内目标服务需要经过服务网格内的Sidecar代理进行流量拦截,非集群内目标则绕过服务网格内的Sidecar代理。

具体操作:

  • 在左侧导航栏,选择服务网格 > 网格管理。
  • 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
  • 在网格详情页面左侧导航栏,选择数据面组件管理 > Sidecar代理配置。
  • 在Sidecar代理配置页面全局页签下单击按端口或地址启用/禁用Sidecar代理,在拦截对外访问的地址范围文本框中设置拦截的网段,然后单击更新设置。
  • 您也可以在不拦截对外访问的地址范围文本框中设置不拦截的网段,那么除了设置的不拦截的网段,其他网段都将被拦截。

说明
拦截对外访问的地址范围默认为*,表示对所有的IP网段进行拦截。可以根据实际需要设置拦截的IP网段,一般情况下可以设置为Kubernetes集群的Service CIDR。

相关文章
|
自然语言处理 Kubernetes 安全
服务网格ASM使用FAQ之(1):如何使用WebSocket over HTTP/2协议
为了更好地满足企业日益加深的大规模使用服务网格产品、服务多语言互通、服务精细治理等需求,2022 年 4 月 1 日起,阿里云服务网格产品 ASM 正式发布商业化版本,为企业在生产环境下大规模落地服务网格能力提供性能、安全、高可用、高可靠等服务保障。阿里云内部很早就开始调研并实践 ServiceMesh 技术,通过总结业务场景落地经验,持续驱动技术发展,积累一系列服务网格核心技术,并将其沉淀成为业
778 0
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
6390 85
终极 Nginx 配置指南(全网最详细)
|
测试技术
三种等待方式(‌线程等待、‌隐式等待、‌显式等待)
三种等待方式(‌线程等待、‌隐式等待、‌显式等待)
749 4
|
存储 机器学习/深度学习 安全
Java基础+进阶
本文适合Java入门和复习回顾。内容覆盖JDK下载和hello world、IDEA下载安装配置、类、基本数据类型、方法、修饰符、关键字、面向对象、继承、多态、接口、异常、集合、i/o流、多线程、网络编程、Lambda表达式、接口组成更新、方法引用、函数式接口、 Stream流、 反射、模块化、XML
Java基础+进阶
|
存储 运维 监控
阿里云物联网平台的优势
【7月更文挑战第19天】阿里云物联网平台的优势
562 1
|
SQL XML 存储
MySQL:使用mysqldump在Windows数据库定时备份
MySQL:使用mysqldump在Windows数据库定时备份
MySQL:使用mysqldump在Windows数据库定时备份
|
Python
ArcGIS中ArcMap通过Python程序脚本新建工具箱与自定义工具的方法
ArcGIS中ArcMap通过Python程序脚本新建工具箱与自定义工具的方法
347 1
数学问题-圆上某点沿圆心旋转后的坐标关系式
数学问题-圆上某点沿圆心旋转后的坐标关系式
829 2
|
存储 SQL 数据库连接
php查询数据(日期查询)和fastadmin的日期查询
php查询数据(日期查询)和fastadmin的日期查询
|
人工智能 自然语言处理 运维
站酷基于服务网格ASM的生产实践
在站酷的生产实践中,多集群、多语言的业务架构对统一管理带来了不小的挑战。对于服务网格来说,由于Sidecar模式的无侵入式特性,可以以统一的方式管理以不同技术栈开发的多语言应用,实现显著的运维成本降低。但对于社区服务网格Istio而言,多集群下的服务治理、以及对不同的Kuberenets集群形态的兼容仍然是一个极大的挑战。通过使用服务网格ASM,对多集群、多形态、多语言服务的统一纳管成为了非常简单的工作。托管式服务网格 ASM 在成为多种异构类型计算服务统一管理的基础设施中, 提供了统一的流量管理能力、服务安全能力、服务可观测性能力、以及实现统一的代理可扩展能力, 以此构筑企业级服务网格平台。
1131 1
站酷基于服务网格ASM的生产实践