Alibaba Cloud Container ImageServiceリバースアクセスプロキシを実装する

実際のビジネスシナリオは非常に複雑な場合があり、セキュリティ、コンプライアンス、アクセス制限、およびその他の理由により、次のものが必要になる場合があります。

  1. オフラインIDCは、エージェントを使用してクラウド上のリソースにアクセスします。
  2. リージョンAで、クラウドエンタープライズネットワークを介してリージョンBのクラウドリソースにアクセスします。
  3. 金融クラウド環境では、金融クラウドネットワークアーキテクチャの制限により、金融クラウドイントラネットは金融クラウド内でのみアクセスでき、インターネットへの直接アクセスはサポートされていません。エージェントを介してアクセスする必要があります。

この記事では、Alibaba Cloudコンテナイメージサービス(デフォルトインスタンス/エンタープライズバージョンインスタンス)の場合、最初にイメージプッシュ/プルプロセスのインタラクティブロジックを紹介して、プロキシする必要のあるすべてのサービスを分類し、次にパブリックネットワークのHTTPリバースを構築します。コンテナイメージサービスにアクセスするためのプロキシマルチシナリオプロキシアクセスモードの原理を示します。

 

ミラープッシュおよびプルプロセス

レジストリインタラクティブlogic.jpg

 

上の図は、Alibaba Cloud Container ImageServiceのプッシュ/プルのインタラクションプロセス全体を示しています。

  1. レジストリへのミラープッシュおよびプル要求を開始します。
  2. レジストリは、401 UnauthorizedのHTTP戻り値を返し、認証サービスのアドレスを伝達します。これにより、クライアントは認証を実行する必要があります。
  3. クライアントは、認証トークンを取得するために認証サービスへの要求を開始します。
  4. 認証サービスは、アクセス許可を保持するトークンをクライアントに返します。
  5. クライアントはトークンをHTTPAuthorizationヘッダーに埋め込み、レジストリへの要求を再度開始します。
  6. レジストリが問題なくトークンのアクセス許可を確認した後、クライアントはイメージプッシュプロセス中にイメージデータをレジストリにプッシュできます。イメージプルプロセス中に、レジストリは時間効率の良いOSSURLアドレスをクライアントに発行します。
  7. クライアントは、OSSのURLアドレスを介してOSSに保存されている画像データをプルします。

 

Alibaba Cloud Container Image Serviceインスタンスにアクセスするプロセス全体には、レジストリ、承認サービス、OSSの3つの部分が含まれます。

 

コンテナイメージに関連するサービスアドレス

コンテナイメージサービスにアクセスするには、クライアントはレジストリ、承認サービス、およびossの3つのサービスと通信する必要があります。

ドメイン名

プロキシを介してコンテナミラーリングサービスにアクセスするには、通常、関連するすべてのドメイン名を知っている必要があります。

  1. レジストリアドレス
    1. パブリックネットワークのデフォルトのインスタンスアドレス形式:registry。$ {RegionId} .aliyuncs.com
    2. イントラネットのデフォルトのインスタンスアドレス形式:registry-vpc。$ {RegionId} .aliyuncs.com
    3. エンタープライズバージョンインスタンスのパブリック/イントラネットアドレス:インスタンスで表示されます。
  1. 承認サービスアドレス
    1. パブリックネットワークのデフォルトの認証サービスアドレス形式:dockerauth。$ {RegionId} .aliyuncs.com
    2. イントラネットのデフォルト認証サービス形式:dockerauth-vpc。$ {RegionId} .aliyuncs.com
    3. パブリックネットワークエンタープライズバージョンインスタンスサービスアドレス形式:dockerauth-ee。$ {RegionId} .aliyuncs.com
    4. イントラネットEnterpriseEditionインスタンスサービスアドレス形式:dockerauth-ee-vpc。$ {RegionId} .aliyuncs.com
  1. OSSバケットアドレス
    1. パブリックネットワークOSSバケットアドレス:oss- $ {RegionId} .aliyuncs.com
    2. イントラネットOSSバケットアドレス:oss- $ {RegionId} -internal.aliyuncs.com
    3. エンタープライズバージョンインスタンスのパブリック/イントラネットOSSバケットアドレス形式:OSSコンソールに表示されます。

 

イントラネット分析

ミラーリングサービスインスタンスへのクロスリージョンアクセスを実現するCENと同様に、VPNを介してクラウドミラーリングサービスインスタンスにアクセスするオフラインIDCでは、通常、イントラネットドメイン名解決IPネットワークセグメントを知っている必要があります。

  1. レジストリのドメイン名解決IPは、それ自体でpingアウトでき、デフォルトのインスタンスは通常変更されません。エンタープライズバージョンのインスタンスはコンソールで表示できます。
  2. 承認サービスのイントラネットドメイン名解決IPは、通常16ビットネットワークセグメントでpingアウトできます。
  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を参照してください)
$プロキシhttp-t tcp -p:443
  1. プロキシに解決するようにオフラインマシンホストを構成します。

ローカルhostsファイルでプロキシECSのパブリックIPにアクセスする必要があるすべてのサービスリージョンのドメイン名解決を構成します。

39.xx.xx.78レジストリ
-vpc.cn 
- beijing.aliyuncs.com39.xx.xx.78 dockerauth-vpc.cn-beijing.aliyuncs.com 39.xx.xx.78 oss-cn-beijing-internal .aliyuncs.com

テストエージェント

  1. オフラインマシンで、最初にVPCアドレスがレジストリに正常にログインしていることを確認します。
$ 
docker login Registry-vpc.cn-beijing.aliyuncs.comユーザー名:zhxxxli
パスワード:
ログインに成功しました
  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
プッシュはリポジトリを参照します[registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx] 
85fcec7ef3ef:プッシュ3e5288f7a70f:プッシュ
56bc37de0858:プッシュ
1c91bf69a08b:プッシュ
cb42413394c4:プッシュ
cb42413394c4:プッシュ
latest:ダイジェスト: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
最新:
docker -builder / nginxからプルダイジェスト:sha256:0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8
ステータス:registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latestの新しいイメージをダウンロードしました

クロスドメインCEN、コンテナミラーリングサービスへのオフラインVPNアクセスなどのシナリオの説明。

最初にレジストリ、承認サービス、およびossサービスの内部ネットワーク分析IPネットワークセグメントを取得し、3つのネットワークセグメントをルートに追加する必要があります。

デバッグエージェント

  1. / v2 /アドレスに対するレジストリの要求の返された結果を表示します。次のように、返される結果401と認証サービスアドレスhttps://dockerauth-vpc.cn-beijing.aliyuncs.com/authは正しいです。
$ curl 
-vv https://registry-vpc.cn-beijing.aliyuncs.com/v2/ * 39.xx.xx.78を試行しています... 
* TCP_NODELAYセット
* registry-vpc.cn-beijing.aliyuncsに接続されています。 com(39.xx.xx.78)ポート443(#0)
* ALPN、h2を提供
* ALPN、http / 1.1を提供
*証明書の検証場所を正常に設定:
* CAfile:/etc/ssl/cert.pem 
  CApath:なし
* TLSv1.2(OUT)、TLSハンドシェイク、クライアントhello(1):
* TLSv1.2(IN)、TLSハンドシェイク、サーバーhello(2):
* TLSv1.2(IN)、TLSハンドシェイク、証明書(11):
* TLSv1.2(IN)、TLSハンドシェイク、サーバーキー交換(12):
* TLSv1.2(IN)、TLSハンドシェイク、サーバー終了(14):
* TLSv1.2(OUT)、TLSハンドシェイク、クライアントキー交換(16 )::
* TLSv1.2(OUT)、TLS変更暗号、変更暗号仕様(1):
* TLSv1.2(OUT)、TLSハンドシェイク、終了(20):
* TLSv1.2(IN)、TLS変更暗号、変更暗号仕様(1):
* TLSv1.2(IN)、TLSハンドシェイク、終了(20):
* TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256を使用したSSL接続
* ALPN、h2の使用を許可されたサーバー
*サーバー証明書:
*件名:C = CN; ST = ZheJiang; L =杭州; O =アリババ(中国)テクノロジー株式会社; CN = * 
。registry.aliyuncs.com *開始日:Dec 14 06:26:07 2020 GMT 
*有効期限:Jan 15 06:26:07 2022 GMT 
* subjectAltName:host "registry-vpc.cn-beijing.aliyuncs。 com」は証明書の「* .cn-beijing.aliyuncs.com」と一致しました 
*発行者:C = BE; O = GlobalSign nv-sa; CN = GlobalSign組織の検証CA-SHA256-G2 
* SSL証明書の検証に問題はありません
* HTTP2を使用して、サーバーはマルチユースをサポートします
*接続状態が変更されました(HTTP / 2が確認されました)
*アップグレード後にストリームバッファー内のHTTP / 2データを接続バッファーにコピーする:len = 0 
*ストリームIDを使用する:1(イージーハンドル0x7f83d3808200)
> GET / v2 / HTTP / 2 
>ホスト:registry-vpc.cn-zhangjiakou.aliyuncs。 com 
> User-Agent:curl / 7.64.1 
> Accept:* / * 
> 
*接続状態が変更されました(MAX_CONCURRENT_STREAMS == 250)!
<HTTP / 2 401 
<コンテンツタイプ:application / json; charset = utf-8 
<docker-distribution-api-version:registry / 2.0 
<date:Sun、21 Mar 2021 09:09:39 GMT 
< 
{"errors":[{"code": " UNAUTHORIZED "、" message ":"認証が必要です "、" detail ": 
<www-authenticate:Bearer realm = "https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth"、service =" registry。 aliyuncs.com:cn-beijing:
<content-length:87 
*接続を閉じる0

ヘルムチャートインスタンスに対して/ api / _ / _ / chartsインターフェースをリクエストする必要があります

  1. 次に、1で返された認証アドレスを要求して、認証サービスへのアクセスが正常であることを確認します。トークンを取得できます。
$ curl https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth
{ "access_tokenは": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R0​​1zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw"、 "トークン": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0。eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R0​​1zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJwNTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R0​​1zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJwNTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R0​​1zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw
  1. 次に、OSSアクセスに問題がないことを確認します。
$ curl https://oss-cn-beijing-internal.aliyuncs.com 
<?xml version = "1.0" encoding = "UTF-8"?> 
<Error> 
  <Code> AccessDenied </ Code> 
  <Message>匿名アクセスこの操作は禁止されています。</ Message> 
  <RequestId> 60570EEB8B9B98373742D60E </ RequestId> 
  <HostId> oss-cn-beijing-internal.aliyuncs.com </ HostId> 
</ Error>

付録

  1. レジストリv2oauth2認証:https://docs.docker.com/registry/spec/auth/token/
  2. goproxyリバースプロキシhttps://snail.gitee.io/proxy/manual/zh/#/?id=_19-https%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90% 86
  3. OSSイントラネットドメイン名とVIPネットワークセグメントの比較表https://help.aliyun.com/document_detail/196960.html?spm=a2c4g.11186623.6.628.39e82e9fNE1Zmp

おすすめ

転載: blog.csdn.net/weixin_39860915/article/details/115212398