Mettre en œuvre le proxy d'accès inverse du service d'image de conteneur cloud Alibaba

Les scénarios commerciaux réels peuvent être très compliqués et, en raison de la sécurité, de la conformité, des restrictions d'accès et d'autres raisons, vous devrez peut-être:

  1. Offline IDC utilise des agents pour accéder aux ressources sur le cloud.
  2. Dans la région A, accédez aux ressources cloud de la région B via le réseau d'entreprise cloud.
  3. Dans l'environnement du cloud financier, en raison des limites de l'architecture du réseau du cloud financier, l'intranet du cloud financier n'est accessible qu'à l'intérieur du cloud financier et ne prend pas en charge l'accès direct sur Internet. Il doit être accessible via un agent.

Pour le service d'image de conteneur Alibaba Cloud (instance par défaut / instance de version d'entreprise), cet article présentera d'abord la logique interactive du processus push / pull d'image pour trier tous les services qui doivent être mandatés, puis créer un réseau public HTTP inverse proxy pour accéder au service d'image de conteneur pour vous montrer le principe du mode d'accès proxy multi-scénarios.

 

Processus de poussée et de traction du miroir

Logique interactive du registre.jpg

 

La figure ci-dessus montre l'ensemble du processus d'interaction d'Alibaba Cloud Container Image Service Push / Pull:

  1. Lancez une demande push et pull miroir vers le registre.
  2. Le registre renvoie la valeur de retour HTTP 401 Unauthorized et porte l'adresse du service d'autorisation, qui oblige le client à effectuer l'authentification.
  3. Le client lance une demande au service d'authentification pour obtenir un jeton d'autorisation.
  4. Le service d'authentification renvoie un jeton portant des autorisations au client.
  5. Le client intègre le jeton dans l'en-tête d'autorisation HTTP et lance à nouveau une demande au registre.
  6. Une fois que le registre a vérifié les autorisations du jeton sans problème, le client peut pousser les données d'image vers le registre pendant le processus de poussée d'image; pendant le processus d'extraction d'image, le registre émettra une adresse URL OSS efficace dans le temps au client.
  7. Le client extrait les données d'image stockées dans OSS via l'adresse URL OSS.

 

L'ensemble du processus d'accès à l'instance Alibaba Cloud Container Image Service comprend trois parties: registre, service d'autorisation et OSS.

 

Adresse de service liée à l'image du conteneur

Pour accéder au service d'image de conteneur, le client doit communiquer avec trois services: registre, service d'autorisation et oss.

nom de domaine

Pour accéder au service de mise en miroir de conteneurs via un proxy, vous devez généralement connaître tous les noms de domaine pertinents.

  1. adresse de registre
    1. Format d'adresse de l'instance de réseau public par défaut: registry. $ {RegionId} .aliyuncs.com
    2. Format d'adresse d'instance intranet par défaut: registry-vpc. $ {RegionId} .aliyuncs.com
    3. Adresse publique / intranet de l'instance de la version entreprise: visible dans l'instance.
  1. adresse du service d'autorisation
    1. Le format d'adresse du service d'authentification par défaut sur le réseau public: dockerauth. $ {RegionId} .aliyuncs.com
    2. Format du service d'authentification par défaut de l'intranet: dockerauth-vpc. $ {RegionId} .aliyuncs.com
    3. Format d'adresse du service d'instance de la version d'entreprise du réseau public: dockerauth-ee. $ {RegionId} .aliyuncs.com
    4. Format d'adresse du service d'instance Intranet Enterprise Edition: dockerauth-ee-vpc. $ {RegionId} .aliyuncs.com
  1. Adresse du bucket OSS
    1. Adresse du bucket OSS du réseau public: oss - $ {RegionId} .aliyuncs.com
    2. Adresse du compartiment OSS intranet: oss - $ {RegionId} -internal.aliyuncs.com
    3. Format d'adresse du bucket OSS public / intranet de l'instance de version d'entreprise: visible sur la console OSS.

 

Analyse intranet

Comme CEN pour obtenir un accès interrégional aux instances de service de mise en miroir; l'accès IDC hors ligne aux instances de service de mise en miroir cloud via VPN nécessite généralement de connaître le segment de réseau IP de résolution de nom de domaine intranet.

  1. L'adresse IP de résolution de nom de domaine du registre peut être envoyée par lui-même et l'instance par défaut ne change généralement pas; l'instance de la version d'entreprise peut être affichée sur la console.
  2. L'IP de résolution de nom de domaine intranet du service d'autorisation peut être envoyé par ping, généralement un segment de réseau 16 bits.
  3. Voir l'annexe 3 pour le tableau des noms de domaine intranet oss et des segments de réseau VIP.

Configurer le proxy HTTPS (prenez l'accès à l'instance par défaut de Beijing comme exemple)

Architecture

Proxy inverse de Container Image Service.jpg

Configurer le proxy

  1. Créez un ECS dans la même région que l'instance de service de mise en miroir de conteneur qui doit être proxy et ouvrez la restriction d'accès au réseau externe sur le port 443.
  2. Installez le proxy goproxy.
$ curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | frapper
  1. Exécutez un proxy inverse. (Voir l'annexe 2 pour les principes spécifiques)
$ proxy http -t tcp -p: 443
  1. Configurez les hôtes de machine hors ligne pour les résoudre en proxy.

Configurez la résolution de nom de domaine de toutes les régions de service auxquelles il faut accéder à l'adresse IP publique du proxy ECS dans le fichier d'hôtes local.

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

Agent de test

  1. Sur la machine hors ligne, vérifiez d'abord que l'adresse VPC est correctement connectée au registre.
$ docker login registry-vpc.cn-beijing.aliyuncs.com 
Nom d'utilisateur: zhxxxli 
Mot de passe: 
Connexion réussie
  1. Sur la machine hors ligne, vérifiez que l'adresse VPC pousse l'image avec succès et affichez l'image sur la console.
$ docker pull nginx: dernière 
balise $ docker nginx: dernier registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest 

$ docker push registry-vpc.cn-beijing.aliyuncs.com/docker-builder/ nginx: dernière 
La poussée fait référence au dépôt [registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx] 
85fcec7ef3ef: Poussé 
3e5288f7a70f: Poussé 
56bc37de0858: Poussé 
1c91bf69a08b: Poussé 
cb42413394c4: Poussé plus 
tard: digérer: SHA256: taille 0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8 : 1362
  1. Sur la machine hors ligne, vérifiez que l'adresse VPC télécharge l'image avec succès.
$ docker rmi nginx: dernier 
$ docker rmi registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest 

$ docker pull registry-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest 
dernier: Tirage de docker-builder / nginx 
Digest: sha256: 0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8 
Statut: Image plus récente téléchargée pour registry-vpc.cn-beijing.aliyuncs.com/docker-latest/nginx:

Description de scénarios tels que le CEN interdomaine, l'accès VPN hors ligne aux services de mise en miroir de conteneurs, etc.

Vous devez d'abord obtenir le segment de réseau IP d'analyse du réseau interne du registre, du service d'autorisation et des services OSS, puis ajouter les trois segments de réseau à l'itinéraire.

Agent de débogage

  1. Affichez le résultat renvoyé par la demande du registre pour l'adresse / v2 /. Comme suit, le résultat de retour 401 et l'adresse du service d'authentification https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth sont corrects.
$ curl -vv https://registry-vpc.cn-beijing.aliyuncs.com/v2/ 
* Essayer 39.xx.xx.78 ... 
* TCP_NODELAY set 
* Connecté à registry-vpc.cn-beijing.aliyuncs. com (39.xx.xx.78) port 443 (# 0) 
* ALPN, offrant h2 
* ALPN, offrant http / 1.1 
* emplacements de vérification de certificat définis avec succès: 
* CAfile: /etc/ssl/cert.pem 
  CApath: aucun 
* TLSv1.2 (OUT), prise de contact TLS, hello client (1): 
* TLSv1.2 (IN), prise de contact TLS, serveur hello (2): 
* TLSv1.2 (IN), prise de contact TLS, certificat (11): 
* TLSv1.2 (IN), prise de contact TLS, échange de clé serveur (12): 
* TLSv1.2 (IN), prise de contact TLS, serveur terminé (14): 
* TLSv1.2 (OUT), prise de contact TLS, échange de clé client (16) ): 
* TLSv1.2 (OUT), changement de chiffrement TLS, changement de spécification de chiffrement ( 1):
* TLSv1.2 (OUT), prise de contact TLS, terminé (20): 
* TLSv1.2 (IN), changement de chiffrement TLS, changement de spécification de chiffrement (1): 
* TLSv1.2 (IN), prise de contact TLS, terminé (20) : 
* Connexion SSL utilisant TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 
* ALPN, serveur accepté d'utiliser h2 
* Certificat de serveur: 
* sujet: C = CN; ST = ZheJiang; L = HangZhou; O = Alibaba (Chine) Technology Co., Ltd.; CN = *. Registry.aliyuncs.com 
* date de début: 14 décembre 06:26:07 2020 GMT 
* date d'expiration: 15 janvier 06:26:07 2022 GMT  
* subjectAltName: host "registry-vpc.cn-beijing.aliyuncs. com "correspond au certificat" * .cn-beijing.aliyuncs.com "
* émetteur: C = BE; O = GlobalSign nv-sa; CN = GlobalSign Organization Validation CA - SHA256 - G2 
* Certificat SSL vérifier ok. 
* En utilisant HTTP2, le serveur prend en charge le multi-usage 
* L'état de la connexion a changé (HTTP / 2 confirmé)
* Copie des données HTTP / 2 dans le tampon de flux vers le tampon de connexion après la mise à niveau: len = 0 
* Utilisation de l'ID de flux: 1 (manipulation facile 0x7f83d3808200) 
> GET / v2 / HTTP / 2 
> Host: registry-vpc.cn-zhangjiakou.aliyuncs com 
> User-Agent: curl / 7.64.1 
> Accepter: * / * 
> 
* L'état de connexion a changé (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:
<content-length: 87  
<date: dim, 21 mars 2021 09:09:39 GMT 
< 
{"errors": [{"code": " NON AUTORISÉ "," message ":" authentification requise "," détail ":
* Fermeture de la connexion 0

L'interface / api / _ / _ / charts doit être demandée pour l'instance de helm chart

  1. Ensuite, demandez l'adresse d'authentification renvoyée en 1 pour vérifier que l'accès au service d'autorisation est normal. Un jeton peut être obtenu.
$ curl https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth
{ "Access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw", "jeton": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJwNTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJwNTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw
  1. Assurez-vous ensuite qu'il n'y a pas de problème avec l'accès OSS.
$ curl https://oss-cn-beijing-internal.aliyuncs.com 
<? xml version = "1.0" encoding = "UTF-8"?> 
<Error> 
  <Code> AccessDenied </Code> 
  <Message> Accès anonyme est interdit pour cette opération. </Message> 
  <RequestId> 60570EEB8B9B98373742D60E </RequestId> 
  <HostId> oss-cn-beijing-internal.aliyuncs.com </HostId> 
</Error>

annexe

  1. Registre v2 authentification oauth2: https://docs.docker.com/registry/spec/auth/token/
  2. proxy inverse goproxy https://snail.gitee.io/proxy/manual/zh/#/?id=_19-https%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90% 86
  3. Tableau de comparaison des noms de domaine intranet OSS et des segments de réseau VIP https://help.aliyun.com/document_detail/196960.html?spm=a2c4g.11186623.6.628.39e82e9fNE1Zmp

Je suppose que tu aimes

Origine blog.csdn.net/weixin_39860915/article/details/115212398
conseillé
Classement