如何实现阿里云容器镜像服务反向访问代理?

本文详细解释了如何通过公网HTTPS代理访问阿里云容器镜像服务,包括镜像推送/拉取过程中的鉴权逻辑,以及搭建代理服务器进行VPC和线下IDC访问实例的步骤。重点展示了不同场景下如何配置代理以突破网络限制。
简介:本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 HTTPS 反向代理来访问容器镜像服务来向您展示多场景代理访问模式原理。

真实业务场景可能很复杂,因安全、合规、访问限制等原因可能需要:

  1. 在线下 IDC 通过代理来访问云上资源。
  2. 在地域 A 通过云企业网来访问地域 B 的云资源。
  3. 金融云环境下,因金融云网络架构限制,金融云内网类型的只能在金融云内部访问,不支持在互联网上直接访问,需要通过代理来访问。

针对阿里云容器镜像服务(默认实例/企业版实例),本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 HTTP 反向代理来访问容器镜像服务来向您展示多场景代理访问模式原理。


镜像推拉过程

Registry 交互逻辑.jpg


上图展现了阿里云容器镜像服务推送/拉取的整个交互过程:

  1. 向 registry 发起镜像推拉请求。
  2. registry 返回 401 Unauthorized 的 HTTP 返回值,并且携带鉴权服务(authorization service)的地址,需要客户端去做鉴权。
  3. 客户端向鉴权服务发起请求以获取一个授权 token。
  4. 鉴权服务返回一个携带权限的 token 给客户端。
  5. 客户端将 token 嵌入 HTTP Authorization header 头中,再次向 registry 发起请求。
  6. registry 验证 token 权限无问题后,在镜像推送过程中,客户端可以向 registry 推送镜像数据;在镜像拉取过程中,registry 会向客户端颁发有时效的 OSS url 地址。
  7. 客户端通过 OSS url 地址拉取保存在 OSS 中的镜像数据。


整个访问阿里云容器镜像服务实例的过程涉及 Registry、Authorization Service 和 OSS 三部分。


容器镜像相关服务地址

客户端访问容器镜像服务,需要与 registry、authorization service 和 oss 三种服务通信。

域名

通过代理方式访问容器镜像服务,一般需要知道所有相关域名。

  1. registry 地址
    1. 公网默认实例地址格式:registry.${RegionId}.aliyuncs.com
    2. 内网默认实例地址格式:registry-vpc.${RegionId}.aliyuncs.com
    3. 企业版实例公网/内网地址:实例内可见。
  1. authorization service 地址
    1. 公网默认鉴权服务地址格式:dockerauth.${RegionId}.aliyuncs.com
    2. 内网默认鉴权服务格式:dockerauth-vpc.${RegionId}.aliyuncs.com
    3. 公网企业版实例服务地址格式:dockerauth-ee.${RegionId}.aliyuncs.com
    4. 内网企业版实例服务地址格式:dockerauth-ee-vpc.${RegionId}.aliyuncs.com
  1. OSS Bucket 地址
    1. 公网 OSS Bucket 地址:oss-${RegionId}.aliyuncs.com
    2. 内网 OSS Bucket 地址:oss-${RegionId}-internal.aliyuncs.com
    3. 企业版实例公网/内网 OSS Bucket 地址格式:OSS 控制台可见。


内网解析

像通过 CEN 来实现跨地域访问镜像服务实例;线下 IDC 通过 VPN 访问云上镜像服务实例一般需要知道内网域名解析 IP 网段。

  1. registry 内网域名解析 IP 可以自己 ping 出,默认实例一般不变化;企业版实例可以在控制台上查看到。
  2. authorization service 内网域名解析 IP 可以 ping 出,一般取 16 位网段。
  3. oss 各地域内网域名与 VIP 网段表见附录 3。

搭建 HTTPS 代理(以访问北京默认实例为例)

架构

容器镜像服务反向代理.jpg

配置代理
  1. 在与需要进行代理的容器镜像服务实例同地域创建一台 ECS,并开放 443 端口的外网访问限制。
  2. 安装 goproxy 代理。
$ curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash
  1. 运行反向代理。(具体原理见附录 2)
$ proxy http -t tcp -p :443
  1. 配置线下机器 hosts 解析到代理。

将所有需要访问到的服务地域的域名解析在本地 hosts 文件中配置到代理 ECS 的公网 IP 上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值