Implementar el proxy de acceso inverso del servicio de imágenes de contenedores en la nube de Alibaba

Los escenarios comerciales reales pueden ser muy complicados y, debido a la seguridad, el cumplimiento, las restricciones de acceso y otras razones, es posible que necesite:

  1. IDC sin conexión utiliza agentes para acceder a los recursos en la nube.
  2. En la región A, acceda a los recursos de la nube en la región B a través de la red empresarial en la nube.
  3. En el entorno de la nube financiera, debido a las limitaciones de la arquitectura de red de la nube financiera, solo se puede acceder a la intranet de la nube financiera dentro de la nube financiera y no admite el acceso directo a Internet. Debe accederse a través de un agente.

Para el servicio de imágenes de contenedores de Alibaba Cloud (instancia predeterminada / instancia de versión empresarial), este artículo primero presentará la lógica interactiva del proceso de inserción / extracción de imágenes para clasificar todos los servicios que necesitan ser proxy y luego construir una red pública HTTP inversa proxy para acceder al servicio de imagen de contenedor para mostrarle el principio del modo de acceso de proxy de múltiples escenarios.

 

Proceso de empujar y tirar del espejo

Logica interactiva del registro.jpg

 

La figura anterior muestra todo el proceso de interacción de Alibaba Cloud Container Image Service Push / Pull:

  1. Inicie una solicitud de inserción y extracción de réplicas en el registro.
  2. El registro devuelve el valor de retorno HTTP de 401 No autorizado y lleva la dirección del servicio de autorización, que requiere que el cliente realice la autenticación.
  3. El cliente inicia una solicitud al servicio de autenticación para obtener un token de autorización.
  4. El servicio de autenticación devuelve un token que lleva permisos al cliente.
  5. El cliente incrusta el token en el encabezado de autorización HTTP y vuelve a iniciar una solicitud al registro.
  6. Una vez que el registro verifica los permisos del token sin problemas, el cliente puede enviar los datos de la imagen al registro durante el proceso de inserción de la imagen; durante el proceso de extracción de la imagen, el registro emitirá una dirección URL de OSS con vigencia en el tiempo para el cliente.
  7. El cliente extrae los datos de la imagen almacenados en OSS a través de la dirección URL de OSS.

 

Todo el proceso de acceso a la instancia de Alibaba Cloud Container Image Service involucra tres partes: Registro, Servicio de Autorización y OSS.

 

Dirección de servicio relacionada con la imagen del contenedor

Para acceder al servicio de imágenes de contenedor, el cliente necesita comunicarse con tres servicios: registro, servicio de autorización y oss.

nombre de dominio

Para acceder al servicio de duplicación de contenedores a través de un proxy, generalmente necesita conocer todos los nombres de dominio relevantes.

  1. dirección de registro
    1. El formato de dirección de la instancia predeterminada de la red pública: registro. $ {RegionId} .aliyuncs.com
    2. Formato de dirección de instancia predeterminado de intranet: registro-vpc. $ {RegionId} .aliyuncs.com
    3. Dirección pública / de intranet de la instancia de la versión empresarial: visible en la instancia.
  1. dirección del servicio de autorización
    1. El formato de dirección del servicio de autenticación predeterminado en la red pública: dockerauth. $ {RegionId} .aliyuncs.com
    2. Formato del servicio de autenticación predeterminado de la intranet: dockerauth-vpc. $ {RegionId} .aliyuncs.com
    3. Formato de dirección de servicio de instancia de versión empresarial de red pública: dockerauth-ee. $ {RegionId} .aliyuncs.com
    4. Formato de dirección de servicio de la instancia de Intranet Enterprise Edition: dockerauth-ee-vpc. $ {RegionId} .aliyuncs.com
  1. Dirección del depósito de OSS
    1. Dirección del depósito de OSS de la red pública: oss - $ {RegionId} .aliyuncs.com
    2. Dirección del depósito de OSS de intranet: oss - $ {RegionId} -internal.aliyuncs.com
    3. El formato de dirección del depósito de OSS público / intranet de la instancia de la versión empresarial: visible en la consola de OSS.

 

Análisis de intranet

Al igual que CEN para lograr acceso interregional a instancias de servicios de duplicación, el acceso de IDC fuera de línea a las instancias de servicios de duplicación en la nube a través de VPN generalmente requiere conocer el segmento de red IP de resolución de nombres de dominio de la intranet.

  1. La IP de resolución de nombre de dominio del registro se puede hacer ping por sí misma, y ​​la instancia predeterminada generalmente no cambia; la instancia de la versión empresarial se puede ver en la consola.
  2. Se puede hacer ping a la dirección IP de resolución de nombre de dominio de la intranet del servicio de autorización, generalmente un segmento de red de 16 bits.
  3. Consulte el Apéndice 3 para ver la tabla de nombres de dominio de intranet de OS y segmentos de red VIP.

Configure el proxy HTTPS (acceda a la instancia predeterminada de Beijing como ejemplo)

Arquitectura

Container Image Service Reverse Proxy.jpg

Configurar proxy

  1. Cree un ECS en la misma región que la instancia del servicio de duplicación de contenedores que necesita ser proxy y abra la restricción de acceso a la red externa en el puerto 443.
  2. Instale el proxy goproxy.
$ curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | intento
  1. Ejecute un proxy inverso. (Consulte el Apéndice 2 para conocer los principios específicos)
$ proxy http -t tcp -p: 443
  1. Configure los hosts de la máquina sin conexión para que se resuelvan en el proxy.

Configure la resolución de nombres de dominio de todas las regiones de servicio a las que se debe acceder a la IP pública del proxy ECS en el archivo de hosts locales.

39.xx.xx.78 registro-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

Agente de prueba

  1. En la máquina fuera de línea, primero verifique que la dirección de la VPC haya iniciado sesión correctamente en el registro.
$ docker login registration-vpc.cn-beijing.aliyuncs.com 
Nombre de usuario: zhxxxli 
Contraseña: 
Inicio de sesión exitoso
  1. En la máquina sin conexión, verifique que la dirección de VPC envíe la imagen correctamente y visualice la imagen en la consola.
$ docker pull nginx: última 
etiqueta $ docker nginx: último registro-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest 

$ docker push registro-vpc.cn-beijing.aliyuncs.com/docker-builder/ nbeginx: último 
El empuje se refiere al repositorio [registro-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx] 
85fcec7ef3ef: Empujado 
3e5288f7a70f: Empujado 
56bc37de0858: Empujado 
1c91bf69a08b: Empujado 
cb4254aaaaa08b: 
Último resumen cb20425939490: empujado : 1362
  1. En la máquina sin conexión, verifique que la dirección de VPC descargue la imagen correctamente.
$ docker rmi nginx: último 
registro de 

$ docker rmi-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest $ docker pull registro-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest 
último: Extrayendo de docker-builder / nginx 
Digest: sha256: 0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8 
Estado: Descargado una imagen más nueva para registration-vpc.cn-beijing.aliyuncs.com/docker-builder/nginx:latest

Descripción de escenarios como CEN entre dominios, acceso VPN fuera de línea a servicios de duplicación de contenedores, etc.

Primero debe obtener el segmento de red IP de análisis de red interno del registro, el servicio de autorización y los servicios OSS, y agregar los tres segmentos de red a la ruta.

Agente de depuración

  1. Vea el resultado devuelto de la solicitud del registro para la dirección / v2 /. De la siguiente manera, el resultado de la devolución 401 y la dirección del servicio de autenticación https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth son correctos.
$ curl -vv https://registry-vpc.cn-beijing.aliyuncs.com/v2/ 
* Intentando 39.xx.xx.78 ... 
* TCP_NODELAY set 
* Conectado al registro-vpc.cn-beijing.aliyuncs. com (39.xx.xx.78) puerto 443 (# 0) 
* ALPN, que ofrece h2 
* ALPN, que ofrece http / 1.1 
* establecer correctamente las ubicaciones de verificación del certificado: 
* CAfile: /etc/ssl/cert.pem 
  CApath: ninguno 
* TLSv1.2 (OUT), protocolo de enlace TLS, saludo del cliente (1): 
* TLSv1.2 (IN), protocolo de enlace TLS, saludo del servidor (2): 
* TLSv1.2 (IN), protocolo de enlace TLS, certificado (11): 
* TLSv1.2 (IN), protocolo de enlace TLS, intercambio de claves del servidor (12): 
* TLSv1.2 (IN), protocolo de enlace TLS, servidor terminado (14):  
* TLSv1.2 (OUT), protocolo de enlace TLS, intercambio de clave de cliente (16 ):
* TLSv1.2 (OUT), cambio de cifrado TLS, cambio de especificación de cifrado ( 1):
* TLSv1.2 (OUT), protocolo de enlace TLS, terminado (20): 
* TLSv1.2 (IN), cambio de cifrado de TLS, cambio de especificación de cifrado (1): 
* TLSv1.2 (IN), protocolo de enlace TLS, terminado (20) : 
* Conexión SSL usando TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 
* ALPN, servidor aceptado para usar h2 
* Certificado de servidor: 
* asunto: C = CN; ST = ZheJiang; L = HangZhou; O = Tecnología Co., Ltd de Alibaba (China); CN = *. 
Registry.aliyuncs.com * fecha de inicio: 14 de diciembre 06:26:07 2020 GMT 
* fecha de vencimiento: 15 de enero 06:26:07 2022 GMT
* Usando HTTP2, el servidor admite usos múltiples 
* El estado de la conexión ha cambiado (HTTP / 2 confirmado) 
* subjectAltName: host "registro-vpc.cn-beijing.aliyuncs. com "certificados coincidentes" * .cn-beijing.aliyuncs.com "
* emisor: C = BE; O = GlobalSign nv-sa; CN = GlobalSign Organisation Validation CA - SHA256 - G2 
* Certificado SSL verificar ok. 
* Copiando datos HTTP / 2 en el búfer de flujo al búfer de conexión después de la actualización: len = 0 
* Usando el ID de flujo: 1 (fácil manejo 0x7f83d3808200) 
> GET / v2 / HTTP / 2 
> Host: registry-vpc.cn-zhangjiakou.aliyuncs. com 
> User-Agent: curl / 7.64.1 
> Aceptar: * / * 
> 
* ¡El estado de la conexión cambió (MAX_CONCURRENT_STREAMS == 250)! 
<HTTP / 2 401 
<tipo de contenido: aplicación / json; charset = utf-8 
<docker-distribution-api-version: registry / 2.0 
<www-authenticate: Bearer realm = "https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth", service = "registro. aliyuncs.com:cn-beijing:
<longitud del contenido: 87 
<fecha: domingo, 21 de marzo de 2021 09:09:39 GMT 
< 
{"errors": [{"code": " NO AUTORIZADO "," mensaje ":" autenticación requerida "," detalle ":
* Cerrando conexión 0

Se debe solicitar la interfaz / api / _ / _ / charts para la instancia de helm chart

  1. Luego solicite la dirección de autenticación devuelta en 1 para verificar que el acceso al servicio de autorización sea normal. Se puede obtener una ficha.
$ curl https://dockerauth-vpc.cn-beijing.aliyuncs.com/auth
{ "Señal_acceso": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw", "símbolo": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjRSSU06SEhMNDpHU1MyOjdaQ0w6QkNMRDpKN0ZIOlVPNzM6Q1FETzpNUUg1OjdNQ1E6T0lQUTpYQlk1In0.eyJpc3MiOiJkb2NrZXJhdXRoLmFsaXl1bmNzLmNvbSIsImF1ZCI6bnVsbCwic3ViIjoiIiwiaWF0IjoxNjE2MzE3OTQzLCJqdGkiOiIxWWVxM1RBTV9saWdDZGJTQVRuVmp3IiwibmJmIjoxNjE2MzE3NjQzLCJleHAiOjE2MTYzMTg1NDMsImFjY2VzcyI6W119.NTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJwNTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJwNTdDy8vs5F1eUrsDPJytMNl7k3qMU-GCZjdp7TpF61HPG6kL5HjtLeTmQScz3PHiG89LMYItzVtzyFSp8QD09hhY_x0yCdrNFzp1fhuiagcuyJiTgwZWT8RXClbp6hBIocUOPESkABlxbqRDXRCSDBk7NNvzXzPEZcErG5ZUCSukddzZ4znJu98JSK3YfL6KoviJvBKP1stJCk_qJ8MsechfiZyJMpzVsFb2ZGQpR0uwY_jlGYY6KXfKEfQL1nMqrqHmJNOhiy32AQ5ToJZkHgHNutIen7AGTnMW3bpuL3A5fSO2AW1R01zv5RnMcWHMOs5XEizmlHIVJy9N7G0ZJw
  1. Luego, asegúrese de que no haya ningún problema con el acceso a OSS.
$ curl https://oss-cn-beijing-internal.aliyuncs.com 
<? xml version = "1.0" encoding = "UTF-8"?> 
<Error> 
  <Code> AccessDenied </Code> 
  <Message> Acceso anónimo está prohibido para esta operación. </Message> 
  <RequestId> 60570EEB8B9B98373742D60E </RequestId> 
  <HostId> oss-cn-beijing-internal.aliyuncs.com </HostId> 
</Error>

apéndice

  1. Autenticación de registro v2 oauth2: https://docs.docker.com/registry/spec/auth/token/
  2. proxy inverso goproxy https://snail.gitee.io/proxy/manual/zh/#/?id=_19-https%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90% 86
  3. Tabla de comparación de segmento de red VIP y nombre de dominio de intranet OSS https://help.aliyun.com/document_detail/196960.html?spm=a2c4g.11186623.6.628.39e82e9fNE1Zmp

Supongo que te gusta

Origin blog.csdn.net/weixin_39860915/article/details/115212398
Recomendado
Clasificación