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

简介: 本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 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 上。

39.xx.xx.78 registry-vpc.cn-beijing.aliyuncs.com
39.xx.xx.78 dockerauth-vpc.cn-beijing.aliyuncs.com
39.xx.xx.78 oss-cn-beijing-internal.aliyuncs.com

测试代理

  1. 在线下机器上,首先验证 VPC 地址登录 registry 成功。
$ docker login registry-vpc.cn-beijing.aliyuncs.com
Username: zhxxxli
Password:
Login Succeeded
  1. 在线下机器上,验证 VPC 地址推送镜像成功,并在控制台查看到镜像。
$ docker pull nginx:latest
$ docker tag nginx:latest registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest$ docker push registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest
The push refers to repository [registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx]
85fcec7ef3ef: Pushed
3e5288f7a70f: Pushed
56bc37de0858: Pushed
1c91bf69a08b: Pushed
cb42413394c4: Pushed
latest: digest: sha256:0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8 size: 1362
  1. 在线下机器上,验证 VPC 地址下载镜像成功。
$ docker rmi nginx:latest 
$ docker rmi registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest$ docker pull registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest
latest: Pulling from docker-builder/nginx
Digest: sha256:0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8
Status: Downloaded newer image for registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest

跨域 CEN、线下 VPN 访问容器镜像服务等场景说明

需要先得到 registry、authorization service 和 oss 三种服务的内网解析 IP 网段,将三种网段添加进路由。

Debug 代理

  1. 查看 registry 对 /v2/ 地址的请求的返回结果。如下,返回结果 401 且返回了鉴权服务地址 https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth 即正确。
$ curl -vv https://registry-vpc.cn-beijing.aliyuncs.com/v2/
*   Trying 39.xx.xx.78...
* TCP_NODELAY set
* Connected to registry-vpc.cn-beijing.aliyuncs.com (39.xx.xx.78) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pemCApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=CN; ST=ZheJiang; L=HangZhou; O=Alibaba (China) Technology Co., Ltd.; CN=*.registry.aliyuncs.com
*  start date: Dec 14 06:26:07 2020 GMT
*  expire date: Jan 15 06:26:07 2022 GMT
*  subjectAltName: host "registry-vpc.cn-beijing.aliyuncs.com" matched cert's "*.cn-beijing.aliyuncs.com"
*  issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Organization Validation CA - SHA256 - G2
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7f83d3808200)
> GET /v2/ HTTP/2
> Host: registry-vpc.cn-zhangjiakou.aliyuncs.com
> User-Agent: curl/7.64.1
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 401
< content-type: application/json; charset=utf-8
< docker-distribution-api-version: registry/2.0
< www-authenticate: Bearer realm="https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth",service="registry.aliyuncs.com:cn-beijing:26842"
< content-length: 87
< date: Sun, 21 Mar 2021 09:09:39 GMT
<
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
* Connection #0 to host registry-vpc.cn-beijing.aliyuncs.com left intact
* Closing connection 0

针对 helm chart 实例应该请求 /api/_/_/charts 接口

  1. 再请求 1 中返回的 auth 地址,验证 authorization service 访问无异常。能够获得一段 token。
$ curl https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth
{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw
  1. 再确定 OSS 访问无问题。
$ curl https://oss-cn-beijing-internal.aliyuncs.com
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Anonymous access is forbidden for this operation.</Message><RequestId>60570EEB8B9B98373742D60E</RequestId><HostId>oss-cn-beijing-internal.aliyuncs.com</HostId>
</Error>

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

频谱扩展 matlab,语音信号频谱扩展

%% pr10_3_1clear all; clc; close all;filedir[]; % 设置路径filenamecolorcloud.wav; % 设置文件名fle[filedir filename]; % 构成完整的路径和文件名[x, fs, bits] wavread(fle); % 读入数据文件xx-me…

数字基础设施开源操作系统欧拉全新发布

在华为全联接2021上&#xff0c;面向数字基础设施的开源操作系统欧拉&#xff08;openEuler&#xff09;全新发布。欧拉操作系统可广泛部署于服务器、云计算、边缘计算、嵌入式等各种形态设备&#xff0c;应用场景覆盖IT&#xff08;Information Technology&#xff09;、CT&am…

二分k均值 matlab,Matlab函数kmeans:K-均值聚类

转自&#xff1a;http://hi.baidu.com/lewutian/item/35dd29efec13d0f5e1a5d418K-means聚类算法采用的是将N*P的矩阵X划分为K个类&#xff0c;使得类内对象之间的距离最大,而类之间的距离最小。使用方法&#xff1a;IdxKmeans(X,K)[Idx,C]Kmeans(X,K)[Idx,C,sumD]Kmeans(X,K)[I…

mysql 聚簇索引和非聚簇索引_MySQL 聚簇索引 二级索引 辅助索引(上两期中奖名单)...

阅读文本大概需要3分钟。MySQL中每个表都有一个聚簇索引( clustered index )&#xff0c;除此之外的表上的每个非聚簇索引都是二级索引&#xff0c;又叫辅助索引( secondary indexes )。以InnoDB来说&#xff0c;每个InnoDB表具有一个特殊的索引称为聚集索引。如果表上定义有主…

共筑计算新生态 共赢数字新时代

[中国&#xff0c;深圳&#xff0c;2021年9月25日] 在华为全联接2021上&#xff0c;华为副总裁、计算产品线总裁邓泰华分享了六大数字生态的最新进展&#xff0c;并携手生态伙伴为计算产业带来一系列重磅内容&#xff1a;欧拉开源操作系统&#xff08;openEuler&#xff09;全新…

数据湖,已成为海量数据存储与分析的重要承载方式

简介&#xff1a; 在云计算和大数据时代&#xff0c;基于数据开展生产、运营、决策成为常态&#xff0c;根据Gartner报道&#xff0c;2019年数据基建方面的采购费用飙升到660亿美元&#xff0c;占据基础架构类软件费用的24%。数据的存储及应用体系是企业生态运转的中枢神经&…

Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

简介&#xff1a; 为了解决大数据、AI 等数据密集型应用在云原生场景下&#xff0c;面临的异构数据源访问复杂、存算分离 I/O 速度慢、场景感知弱调度低效等痛点问题&#xff0c;南京大学PASALab、阿里巴巴、Alluxio 在 2020 年 6 月份联合发起了开源项目 Fluid。 作者 | 顾荣 …

php生成cookie在哪,php程序中cookie的使用方法

Cookie 可以翻译为“小甜品&#xff0c;小饼干” &#xff0c;Cookie 在网络系统中几乎无处不在&#xff0c;当我们浏览以前访问过的网站时&#xff0c;网页中可能会出现 &#xff1a;你好 XXX&#xff0c;这会让我们感觉很亲切&#xff0c;就好像吃了一个小甜品一样。这其实是…

c#类属性和实例属性_Visual C#类和对象的创建方式,定义类,实例化对象,实例讲解...

定义类类由class member类成员组成&#xff0c;包含字段、属性、方法和事件。其中字段和属性为类的数据成员&#xff0c;用来存储数据&#xff1b;方法负责数据的传递和运算。使用类之前&#xff0c;要进行声明&#xff0c;声明的语法如下&#xff1a;Class 类名称{访问权限 数…

面对不可避免的故障,我们造了一个“上帝视角”的控制台

简介&#xff1a; 混沌工程随着云原生的发展逐渐进入大家的视野&#xff0c;通过混沌工程可以很好地发现和解决在云原生化过程中的高可用问题。阿里巴巴在 2019 年开源了底层的混沌工程工具 - chaosblade&#xff0c;今年年初再次开源混沌工程控制台 chaosblade-box&#xff0c…

腾讯云鼎实验室发布云安全攻防矩阵,绘制九大攻防路径全景图

随着云计算技术和产业的蓬勃发展&#xff0c;企业上云已是数字化转型的必然趋势。但云上千般好&#xff0c;却也给企业带来了全新的安全挑战。云平台不仅要应对传统网络架构中存有的DDoS、入侵、病毒等常态问题&#xff0c;还要高度重视技术架构中虚拟机逃逸、资源滥用、横向穿…

Knativa 基于流量的灰度发布和自动弹性实践

简介&#xff1a; Knative 提供了基于流量的自动扩缩容能力&#xff0c;可以根据应用的请求量&#xff0c;在高峰时自动扩容实例数&#xff1b;当请求量减少以后&#xff0c;自动缩容实例&#xff0c;做到自动化地节省资源成本。此外&#xff0c;Knative 还提供了基于流量的灰度…

wordpress index.php 跳转,wordpress点击内容页跳转到其他url的解决方法

谈起wordpress这个源码程序&#xff0c;其实相对于其他的程序在php虚拟主机上的安全性还是比较好的&#xff0c;但是有时间就会莫名其妙的不知道是什么问题&#xff0c;就被挂马了&#xff0c;但是明显的挂马是比较好处理的&#xff0c;就怕的是隐藏的&#xff0c;会弄得我们会…

nginx 部署_部署 hexo 到 nginx

本来博客是使用 GitHub pages &#xff0c;但近些日子访问贼慢&#xff0c;刚好手里有一台小机器&#xff0c;当然是要用起来&#xff08;折腾就对了 &#xff09;。前置条件&#xff1a;已购买 vps 和域名&#xff0c;按需备案。ssh 登录远程服务器&#xff0c;以 CentOS 为例…

阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择

简介&#xff1a; Kubernetes下5场场景应用发布方式的选择&#xff0c;每种发布模式适合什么样的场景&#xff0c;以及如何在阿里云云效上高效落地。 作者&#xff1a;郑云龙&#xff0c;阿里云云效技术专家 Kubernetes面向通用场景提供了非常灵活的应用管理和运维方式&#…

“西部云安全优才计划”落地西安,为云安全高质量发展夯实才智支撑

9月26日&#xff0c;2021首届-西部云安全峰会在西安顺利召开。聚焦西部云安全发展和人才培养需求&#xff0c;在本次峰会上&#xff0c;腾讯安全云鼎实验室、陕西省计算机学会联合西安多所高校发布了“西部云安全优才计划”&#xff0c;凝聚西安以及西部的安全力量&#xff0c;…

如何连接网站小马php,PHP连接mysql示例

$server_name"mysqlserver.com"; //数据库服务器名称$username"user"; // 连接数据库用户名$password"password"; // 连接数据库密码$mysql_database"mysqldb"; // 数据库的名字// 连接到数据库$connmysqli_connect($server_name, $us…

如何做一场高质量的分享?

简介&#xff1a; 最近我发现一些同学的分享越来越趋于“念稿”式。我一边看着分享的同学在上面念稿&#xff0c;另一边看着几十号人在下面看电脑看手机&#xff0c;我心里就特别着急。恨不得我自己上去讲&#xff0c;也恨不得没收了大家的电脑手机。但这种粗暴的方法肯定是不解…

apache日志导入mysql,将Apache访问日志记录到Mysql数据库中

环境操作系统&#xff1a;CentOS步骤1.下载源码下载地址&#xff1a;https://packages.debian.org/jessie/libapache2-mod-log-sql-mysql2.configure./configure --with-apxs/usr/local/bin/httpd/bin/apxs --with-mysql/usr/local/bin/mariadb注意&#xff1a;一定要检查confi…

linux添加php到环境,Linux系统为已编译的PHP环境添加扩展

问题背景平常我们都是先安装mysql&#xff0c;然后才能去安装php。假如先安装php&#xff0c;后安装mysql&#xff0c;由于php需要连接mysql&#xff0c;因而在php引擎中需要配置使用mysql.so扩展。这时需要手动编译生成mysql.so扩展。解决方案使用phpize工具能够生成mysql.so&…