日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2024/9/3 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何实现阿里云容器镜像服务反向访问代理? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
簡介:本文會(huì)先介紹鏡像推送/拉取過程的交互邏輯來梳理需要代理的所有服務(wù),再通過搭建一個(gè)公網(wǎng) HTTPS 反向代理來訪問容器鏡像服務(wù)來向您展示多場(chǎng)景代理訪問模式原理。

真實(shí)業(yè)務(wù)場(chǎng)景可能很復(fù)雜,因安全、合規(guī)、訪問限制等原因可能需要:

  • 在線下 IDC 通過代理來訪問云上資源。
  • 在地域 A 通過云企業(yè)網(wǎng)來訪問地域 B 的云資源。
  • 金融云環(huán)境下,因金融云網(wǎng)絡(luò)架構(gòu)限制,金融云內(nèi)網(wǎng)類型的只能在金融云內(nèi)部訪問,不支持在互聯(lián)網(wǎng)上直接訪問,需要通過代理來訪問。
  • 針對(duì)阿里云容器鏡像服務(wù)(默認(rèn)實(shí)例/企業(yè)版實(shí)例),本文會(huì)先介紹鏡像推送/拉取過程的交互邏輯來梳理需要代理的所有服務(wù),再通過搭建一個(gè)公網(wǎng) HTTP 反向代理來訪問容器鏡像服務(wù)來向您展示多場(chǎng)景代理訪問模式原理。


    鏡像推拉過程


    上圖展現(xiàn)了阿里云容器鏡像服務(wù)推送/拉取的整個(gè)交互過程:

  • 向 registry 發(fā)起鏡像推拉請(qǐng)求。
  • registry 返回 401 Unauthorized 的 HTTP 返回值,并且攜帶鑒權(quán)服務(wù)(authorization service)的地址,需要客戶端去做鑒權(quán)。
  • 客戶端向鑒權(quán)服務(wù)發(fā)起請(qǐng)求以獲取一個(gè)授權(quán) token。
  • 鑒權(quán)服務(wù)返回一個(gè)攜帶權(quán)限的 token 給客戶端。
  • 客戶端將 token 嵌入 HTTP Authorization header 頭中,再次向 registry 發(fā)起請(qǐng)求。
  • registry 驗(yàn)證 token 權(quán)限無問題后,在鏡像推送過程中,客戶端可以向 registry 推送鏡像數(shù)據(jù);在鏡像拉取過程中,registry 會(huì)向客戶端頒發(fā)有時(shí)效的 OSS url 地址。
  • 客戶端通過 OSS url 地址拉取保存在 OSS 中的鏡像數(shù)據(jù)。

  • 整個(gè)訪問阿里云容器鏡像服務(wù)實(shí)例的過程涉及 Registry、Authorization Service 和 OSS 三部分。


    容器鏡像相關(guān)服務(wù)地址

    客戶端訪問容器鏡像服務(wù),需要與 registry、authorization service 和 oss 三種服務(wù)通信。

    域名

    通過代理方式訪問容器鏡像服務(wù),一般需要知道所有相關(guān)域名。

  • registry 地址
  • 公網(wǎng)默認(rèn)實(shí)例地址格式:registry.${RegionId}.aliyuncs.com
  • 內(nèi)網(wǎng)默認(rèn)實(shí)例地址格式:registry-vpc.${RegionId}.aliyuncs.com
  • 企業(yè)版實(shí)例公網(wǎng)/內(nèi)網(wǎng)地址:實(shí)例內(nèi)可見。
  • authorization service 地址
  • 公網(wǎng)默認(rèn)鑒權(quán)服務(wù)地址格式:dockerauth.${RegionId}.aliyuncs.com
  • 內(nèi)網(wǎng)默認(rèn)鑒權(quán)服務(wù)格式:dockerauth-vpc.${RegionId}.aliyuncs.com
  • 公網(wǎng)企業(yè)版實(shí)例服務(wù)地址格式:dockerauth-ee.${RegionId}.aliyuncs.com
  • 內(nèi)網(wǎng)企業(yè)版實(shí)例服務(wù)地址格式:dockerauth-ee-vpc.${RegionId}.aliyuncs.com
  • OSS Bucket 地址
  • 公網(wǎng) OSS Bucket 地址:oss-${RegionId}.aliyuncs.com
  • 內(nèi)網(wǎng) OSS Bucket 地址:oss-${RegionId}-internal.aliyuncs.com
  • 企業(yè)版實(shí)例公網(wǎng)/內(nèi)網(wǎng) OSS Bucket 地址格式:OSS 控制臺(tái)可見。

  • 內(nèi)網(wǎng)解析

    像通過 CEN 來實(shí)現(xiàn)跨地域訪問鏡像服務(wù)實(shí)例;線下 IDC 通過 VPN 訪問云上鏡像服務(wù)實(shí)例一般需要知道內(nèi)網(wǎng)域名解析 IP 網(wǎng)段。

  • registry 內(nèi)網(wǎng)域名解析 IP 可以自己 ping 出,默認(rèn)實(shí)例一般不變化;企業(yè)版實(shí)例可以在控制臺(tái)上查看到。
  • authorization service 內(nèi)網(wǎng)域名解析 IP 可以 ping 出,一般取 16 位網(wǎng)段。
  • oss 各地域內(nèi)網(wǎng)域名與 VIP 網(wǎng)段表見附錄 3。
  • 搭建 HTTPS 代理(以訪問北京默認(rèn)實(shí)例為例)

    架構(gòu)

    配置代理

  • 在與需要進(jìn)行代理的容器鏡像服務(wù)實(shí)例同地域創(chuàng)建一臺(tái) ECS,并開放 443 端口的外網(wǎng)訪問限制。
  • 安裝 goproxy 代理。
  • $ curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash
  • 運(yùn)行反向代理。(具體原理見附錄 2)
  • $ proxy http -t tcp -p :443
  • 配置線下機(jī)器 hosts 解析到代理。
  • 將所有需要訪問到的服務(wù)地域的域名解析在本地 hosts 文件中配置到代理 ECS 的公網(wǎng) 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

    測(cè)試代理

  • 在線下機(jī)器上,首先驗(yàn)證 VPC 地址登錄 registry 成功。
  • $ docker login registry-vpc.cn-beijing.aliyuncs.com Username: zhxxxli Password: Login Succeeded
  • 在線下機(jī)器上,驗(yàn)證 VPC 地址推送鏡像成功,并在控制臺(tái)查看到鏡像。
  • $ 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
  • 在線下機(jī)器上,驗(yàn)證 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 訪問容器鏡像服務(wù)等場(chǎng)景說明

    需要先得到 registry、authorization service 和 oss 三種服務(wù)的內(nèi)網(wǎng)解析 IP 網(wǎng)段,將三種網(wǎng)段添加進(jìn)路由。

    Debug 代理

  • 查看 registry 對(duì) /v2/ 地址的請(qǐng)求的返回結(jié)果。如下,返回結(jié)果 401 且返回了鑒權(quán)服務(wù)地址 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.pem CApath: 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

    針對(duì) helm chart 實(shí)例應(yīng)該請(qǐng)求 /api/_/_/charts 接口

  • 再請(qǐng)求 1 中返回的 auth 地址,驗(yàn)證 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
  • 再確定 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>

    附錄

  • registry v2 oauth2 鑒權(quán):https://docs.docker.com/registry/spec/auth/token/
  • goproxy 反向代理 https://snail.gitee.io/proxy/manual/zh/#/?id=_19-https%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86
  • OSS 內(nèi)網(wǎng)域名與 VIP 網(wǎng)段對(duì)照表 https://help.aliyun.com/document_detail/196960.html?spm=a2c4g.11186623.6.628.39e82e9fNE1Zmp
  • 原文鏈接:https://developer.aliyun.com/article/782899?

    版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

    總結(jié)

    以上是生活随笔為你收集整理的如何实现阿里云容器镜像服务反向访问代理?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。