Operando em uma rede bloqueada

O aplicativo CycleCloud e os nós de cluster podem operar em ambientes com acesso limitado à Internet, embora haja um número mínimo de portas TCP que devem permanecer abertas.

Instalando o Azure CycleCloud em uma rede bloqueada

A VM do CycleCloud deve ser capaz de se conectar a várias APIs do Azure para orquestrar VMs de cluster e autenticar-se no Azure Active Directory. Como essas APIs usam HTTPS, o CycleCloud requer acesso HTTPS de saída para:

  • management.azure.com (Gerenciamento do ARM do Azure)
  • login.microsoftonline.com (Azure AD)
  • watson.telemetry.microsoft.com (Telemetria do Azure)
  • dc.applicationinsights.azure.com (Aplicativo Azure Insights)
  • dc.applicationinsights.microsoft.com (Aplicativo Azure Insights)
  • dc.services.visualstudio.com (Aplicativo Azure Insights)
  • ratecard.azure-api.net (dados de preço do Azure)

A API de gerenciamento é hospedada regionalmente e os intervalos de endereços IP públicos podem ser encontrados aqui.

O logon Azure AD faz parte das APIs comuns do Microsoft 365 e intervalos de endereços IP para o serviço podem ser encontrados aqui.

Os intervalos de endereços IP do Azure Insights e do Log Analytics podem ser encontrados aqui.

O Azure CycleCloud deve ser capaz de acessar contas de Armazenamento do Azure. A maneira recomendada de fornecer acesso privado a esse serviço e a qualquer outro serviço do Azure com suporte é por meio de pontos de extremidade de serviço Rede Virtual.

Se o uso de Grupos de Segurança de Rede ou o Firewall do Azure para limitar o acesso de saída aos domínios necessários, é possível configurar o Azure Cyclecloud para rotear todas as solicitações por meio de um proxy HTTPS. Veja: Usando um proxy Web

Configurando um grupo de segurança de rede do Azure para a VM do CycleCloud

Uma maneira de limitar o acesso à Internet de saída da VM do CycleCloud sem configurar o Firewall do Azure ou um proxy HTTPS é configurar um grupo estrito de segurança de rede do Azure para a sub-rede da VM do CycleCloud. A maneira mais simples de fazer isso é usar Marcas de Serviço na sub-rede ou grupo de segurança de rede no nível da VM para permitir o acesso necessário ao Azure de saída.

  1. Configurar um ponto de extremidade do serviço de armazenamento para a sub-rede para permitir o acesso do CycleCloud ao Armazenamento do Azure

  2. Adicione a seguinte regra de saída do NSG para negar o acesso de saída por padrão usando a Marca de Serviço de Destino "Internet":

Prioridade Nome Porta Protocolo Fonte Destino Ação
4000 BlockOutbound Qualquer Qualquer Qualquer Internet Negar
  1. Adicione as seguintes regras de saída do NSG para permitir o acesso de saída aos serviços do Azure necessários por marca de serviço de destino:
Prioridade Nome Porta Protocolo Fonte Destino Ação
100 AllowAzureStorage 443 TCP Qualquer Armazenamento Allow
101 AllowActiveDirectory 443 TCP Qualquer AzureActiveDirectory Allow
102 AllowAzureMonitor 443 TCP Qualquer AzureMonitor Allow
103 AllowAzureRM 443 TCP Qualquer AzureResourceManager Allow

Comunicações internas entre nós de cluster e CycleCloud

Essas portas precisam estar abertas para permitir a comunicação entre os nós de cluster e o servidor CycleCloud:

Nome Fonte Destino Serviço Protocolo Intervalo de portas
amqp_5672 Nó de Cluster CycleCloud AMQP TCP 5672
https_9443 Nó de Cluster CycleCloud HTTPS TCP 9443

Iniciando clusters do Azure CycleCloud em uma rede bloqueada

Observação

A execução de nós de cluster em uma sub-rede sem acesso à Internet de saída é totalmente compatível hoje, mas é um tópico avançado que geralmente requer uma imagem personalizada ou personalização dos tipos e projetos de cluster do CycleCloud padrão ou ambos.

Estamos atualizando ativamente os tipos de cluster e projetos para eliminar a maioria ou todo esse trabalho. No entanto, se você encontrar falhas com seu tipo de cluster ou projeto em seu ambiente bloqueado, considere abrir uma solicitação de suporte para assistência.

A execução de VMs ou clusters cyclecloud em uma rede virtual ou sub-rede com acesso à Internet de saída geralmente requer o seguinte:

  1. O Azure Cyclecloud deve ser acessível nas VMs do cluster para obter a funcionalidade completa. Ou:
    1. As VMs de cluster devem ser capazes de se conectar diretamente ao Azure Cyclecloud por meio de HTTPS e AMQP ou
    2. O recurso ReturnProxy do Cyclecloud deve ser habilitado no momento da criação do cluster e o próprio Cyclecloud deve ser capaz de se conectar à VM ReturnProxy via SSH
  2. Todos os pacotes de software exigidos pelo cluster devem ser:
    1. Pré-instalado em uma imagem gerenciada personalizada para as VMs do cluster ou
    2. Disponível em um espelho de repositório de pacotes acessível por meio das VMs ou
    3. Copiado para a VM do Armazenamento do Azure e instalado diretamente por um projeto do Cyclecloud
  3. Todos os nós de cluster devem ser capazes de acessar contas de Armazenamento do Azure. A maneira recomendada de fornecer acesso privado a esse serviço e a qualquer outro serviço do Azure com suporte é habilitar um ponto de extremidade de serviço Rede Virtual para o Armazenamento do Azure.

Project Atualizações do GitHub

O Cyclecloud baixará projetos de cluster do GitHub durante a fase de orquestração "Preparo". Esse download ocorrerá após a instalação inicial, após a atualização do Cyclecloud ou ao iniciar um cluster de um determinado tipo pela primeira vez. Em um ambiente bloqueado, o tráfego de saída HTTPS para github.com pode ser bloqueado. Nesse caso, a criação de nó durante a fase de recursos de preparo falhará.

Se o acesso ao GitHub puder ser aberto temporariamente durante a criação do primeiro nó, o CycleCloud preparará os arquivos locais para todos os nós subsequentes. Se o acesso temporário não for possível, os arquivos necessários poderão ser baixados de outro computador e copiados para o CycleCloud.

Primeiro determine qual projeto e versão seu cluster precisará, por exemplo, Slurm 2.5.0. Normalmente, é o número de versão mais alto no banco de dados para um determinado projeto.

/opt/cycle_server/cycle_server execute 'select * from cloud.project where name == "slurm"'

AdType = "Cloud.Project"
Version = "2.5.0"
ProjectType = "scheduler"
Url = "https://github.com/Azure/cyclecloud-slurm/releases/2.5.0"
AutoUpgrade = false
Name = "slurm"

Esta versão do projeto e todas as dependências são encontradas na [marca de versão] (https://github.com/Azure/cyclecloud-slurm/releases/tag/2.5.0). Todos os artefatos de uma versão devem ser baixados. Primeiro baixe o artefato de código e crie um diretório de blobs para as dependências adicionais.

wget https://github.com/Azure/cyclecloud-slurm/archive/refs/tags/2.5.0.tar.gz
tar -xf 2.5.0.tar.gz 
cd cyclecloud-slurm-2.5.0 && mkdir blobs 
#... download all other release artifacts to the /blobs directory with wget ...
wget -P "blobs/" https://github.com/Azure/cyclecloud-slurm/releases/download/2.6.1/cyclecloud_api-8.1.0-py2.py3-none-any.whl
#... copy all the files to the Cyclecloud server
#... then on the Cyclecloud server:
cyclecloud project build
mkdir -p /opt/cycle_server/work/staging/projects/slurm/2.5.0
mkdir -p /opt/cycle_server/work/staging/projects/slurm/blobs
cp build/slurm/* /opt/cycle_server/work/staging/projects/slurm/2.5.0/
cp blobs/* /opt/cycle_server/work/staging/projects/slurm/blobs/
chown -R cycle_server:cycle_server /opt/cycle_server/work/staging

Depois que esses arquivos forem preparados localmente, o Cyclecloud os detectará e não tentará baixá-los do GitHub.