Configurando um Bastion para Acesso ao Cluster

Descubra como configurar um bastion para acessar clusters que você criou usando o Kubernetes Engine (OKE).

Ao executar operações em um cluster usando o kubectl, você deve ter acesso ao ponto final da API do Kubernetes. Da mesma forma, ao executar tarefas administrativas nos nós de trabalho, você deve ter acesso aos nós de trabalho. No entanto, o acesso ao ponto final da API do Kubernetes e/ou aos nós de trabalho pode ser restrito devido a regras de lista de segurança ou porque o ponto final da API do Kubernetes e/ou os nós de trabalho estão em uma sub-rede privada. Nessas situações, você pode configurar bastions no serviço Oracle Cloud Infrastructure Bastion para fornecer acesso seguro ao ponto final da API do Kubernetes e/ou aos nós de trabalho.

A configuração de bastions e sessões bastion envolve várias tarefas diferentes. Dependendo da sua organização, essas tarefas podem ser executadas pela mesma pessoa ou por pessoas diferentes, da seguinte forma:

  • Um administrador de VCN é responsável por criar a VCN, as sub-redes e as regras de segurança para um cluster do Kubernetes e um bastion. As políticas do IAM permitem que o administrador da VCN gerencie a VCN.
  • Um administrador de cluster é responsável por criar bastions para acessar pontos finais e nós de trabalho da API do Kubernetes e por criar sessões bastion para acesso ao nó de trabalho. As políticas do IAM permitem que o administrador do cluster gerencie clusters e bastions.
  • Um usuário de cluster é responsável por criar sessões bastion para acessar pontos finais da API do Kubernetes. As políticas do serviço IAM permitem que o usuário do cluster use clusters e bastions.

Este diagrama mostra um exemplo de configuração de cluster com um bastion que fornece acesso seguro ao ponto final da API do Kubernetes de um cluster e aos nós de trabalho.

Esta imagem mostra uma configuração de cluster de exemplo com uma sub-rede de ponto final da API do Kubernetes, uma sub-rede do nó de trabalho e sub-redes de balanceadores de carga. O acesso às sub-redes é controlado pelas listas de segurança seclist-KubernetesAPIendpoint, seclist-workernodes e seclist-loadbalancers, respectivamente. A sub-rede de ponto final da API do Kubernetes é conectada ao plano de controle do cluster por uma VNIC. Um bastion em uma sub-rede bastion fornece acesso SSH ao ponto final da API do Kubernetes do cluster e aos nós de trabalho. Outros recursos dessa configuração de exemplo são descritos no texto ao redor.

Políticas Obrigatórias do Serviço IAM para Criar e Usar Bastions para Acessar Clusters

Para obter informações sobre as políticas do serviço IAM necessárias para criar bastions e sessões bastion, consulte Políticas do Serviço Bastion.

Se desejado, os administradores de cluster também podem configurar políticas do serviço IAM para limitar os recursos que os usuários do cluster podem acessar usando um bastion. Consulte Configurando políticas do serviço IAM para limitar o uso de bastions.

Configurando um bastion para acessar o ponto final da API do Kubernetes

Para que os usuários do cluster acessem o ponto final privado da API do Kubernetes de um cluster, os administradores da VCN, os administradores do cluster e os usuários do cluster precisam executar várias etapas, conforme descrito nesta seção.

Etapas do Administrador da VCN

Como administrador da VCN, siga estas etapas para configurar regras de segurança de saída e entrada para permitir que um bastion acesse o ponto final da API do Kubernetes:

  1. Crie uma nova sub-rede privada para hospedar o bastion, na mesma VCN do cluster ao qual você deseja fornecer acesso.

    Observe que, se você já tiver criado uma sub-rede para hospedar um bastion para acessar nós de trabalho, poderá reutilizar essa sub-rede em vez de criar uma nova sub-rede. Consulte Configurando um bastion para fornecer acesso SSH a nós gerenciados.

  2. Adicione a seguinte regra de segurança de saída TCP/6443 à lista de segurança associada à sub-rede bastion.

    Essa regra de segurança de saída permite o tráfego da sub-rede bastion para a sub-rede de ponto final da API do Kubernetes do cluster.

    Estado: Destino Protocolo / Dest. Porta Descrição:
    Com monitoramento de estado CIDR de Ponto Final da API Kubernetes (por exemplo, 10.0.0.0/29) TCP/6443 Permitir comunicação do bastion com o ponto final da API do Kubernetes.
  3. Se ainda não estiver presente, adicione a seguinte regra de segurança de entrada TCP/6443 a uma lista de segurança nova ou existente associada à sub-rede que hospeda o ponto final da API do Kubernetes.

    Essa regra de segurança de entrada permite o tráfego para a sub-rede de ponto final da API do Kubernetes proveniente da sub-rede bastion.

    Estado: Origem Protocolo / Dest. Porta Descrição:
    Com monitoramento de estado CIDR da sub-rede do Bastion TCP/6443 Permitir comunicação do bastion com o ponto final da API do Kubernetes.
    Observação

    Embora não seja o design preferencial da Oracle, você pode usar a mesma sub-rede para o bastion e para o ponto final da API do Kubernetes do cluster. Nesse caso, adicione a regra de segurança de saída TCP/6443 à lista de segurança associada à sub-rede de ponto final da API do Kubernetes.

Etapas do Administrador do Cluster

Como administrador do cluster, siga estas etapas para configurar um bastion para acessar o ponto final da API do Kubernetes:

  1. Crie um bastion da seguinte forma:
    1. Na Console, abra o menu de navegação e clique em Identidade e Segurança.
    2. Clique em Bastion.
    3. Na página Bastion, clique em Criar bastion.
    4. Na caixa de diálogo Criar bastion, defina as seguintes propriedades:
      • Nome do Bastion: Um nome para o bastion. Evite fornecer informações confidenciais. Só há suporte para caracteres alfanuméricos.
      • Rede Virtual na Nuvem de Destino: Especifique a VCN do cluster do Kubernetes ao qual você deseja fornecer acesso.
      • Sub-rede de Destino: A sub-rede para hospedar o bastion, com as regras de segurança de entrada e saída que você configurou.
      • Lista de Permissões do Bloco CIDR: Um ou mais intervalos de endereços em notação CIDR que você deseja permitir para conexão com sessões hospedadas por este bastion. Por exemplo, 0.0.0.0/0 para permitir o acesso pela internet ou um intervalo de endereços mais limitado. Por exemplo, 203.0.113.0/24.
    5. (Opcional) Para alterar o tempo máximo durante o qual qualquer sessão desse bastion pode permanecer ativa, clique em Mostrar Opções Avançadas e informe um valor para Duração Máxima da Sessão.
    6. Clique em Criar Bastion.
    7. Quando o bastion tiver sido criado, clique no nome do bastion para ver informações sobre ele, incluindo seu OCID.

    Para obter mais informações sobre como criar um bastion, consulte Para criar um bastion.

  2. Forneça aos usuários do cluster o OCID do bastion.
  3. Certifique-se de que as políticas de IAM adequadas estejam em vigor para autorizar os usuários do cluster a usar o bastion. Consulte Políticas Obrigatórias do Serviço IAM para Criar e Usar Bastions para Acessar Clusters.

    Se desejado, você também pode configurar políticas do serviço IAM para limitar os recursos que os usuários do cluster podem acessar usando o bastion. Consulte Configurando políticas do serviço IAM para limitar o uso de bastions.

Etapas do Usuário do Cluster

Como usuário do cluster, siga estas etapas para criar uma sessão bastion para acessar o ponto final da API do Kubernetes:

  1. Se você ainda não tiver feito isso, crie o arquivo kubeconfig para o cluster que deseja acessar, executando:
    oci ce cluster create-kubeconfig \
      --cluster-id <cluster OCID> \
      --file $HOME/.kube/config \
      --region <region> \
      --token-version 2.0.0
    
  2. Edite o arquivo kubeconfig do cluster e altere o endereço IP especificado para server para especificar o endereço IP e a porta na qual o listener do tráfego SSH será feito:
    1. Localize a linha:
      server: https://x.x.x.x:6443
    2. Altere a linha para:
      server: https://127.0.0.1:6443

      Por exemplo:

      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority-data:______
          server: https://127.0.0.1:6443
      - name: cluster-xxxxxxx
      …
      
  3. Crie uma sessão bastion usando a Console ou a CLI da seguinte forma:

    Usando a Console
    1. Na página Bastion, clique no nome do bastion criado pelo administrador do cluster.
    2. Na página Sessões, clique em Criar sessão.
    3. Na caixa de diálogo Criar sessão, defina as seguintes propriedades:
      • Tipo de sessão: Selecione Sessão de encaminhamento de porta SSH.
      • Nome da sessão: Um nome para exibição para a nova sessão. Evite fornecer informações confidenciais.
      • Estabelecer conexão com o host de destino usando: Selecione Endereço IP.
      • Endereço IP: Especifique a parte do endereço IP do ponto final privado da API do Kubernetes do cluster (mostrado na página Detalhes do Cluster).
      • Porta: Especifique a parte da porta do ponto final privado da API do Kubernetes do cluster (mostrado na página Detalhes do Cluster). Por exemplo, 6443.
      • Chave SSH: Especifique o arquivo de chaves públicas de um par de chaves SSH existente que deseja usar para a sessão ou gere um novo par de chaves SSH e salve a chave privada.
    4. (Opcional) Para alterar o tempo máximo que a sessão pode permanecer ativa, clique em Mostrar Opções Avançadas e informe um valor para Duração Máxima da Sessão.
    5. Clique em Criar sessão.
    Usando a CLI
    oci bastion session create-port-forwarding \
     --bastion-id <bastion OCID> \
     --ssh-public-key-file <ssh public key> \
     --target-private-ip <API Private IP endpoint> \
     --target-port 6443
    

    Para obter mais informações sobre como criar uma sessão bastion, consulte Para criar uma sessão.

  4. Obtenha o comando para criar um túnel SSH usando a Console ou a CLI da seguinte forma:

    Usando a Console

    Na página Sessões, selecione Copiar Comando SSH no menu Ações (Menu Ações) ao lado da sessão que você acabou de criar.

    Usando a CLI
    oci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'

    O comando de túnel SSH que você obteve tem o seguinte formato:

    ssh -i <privateKey> -N -L <localPort>:<session-IP>:<session-port> -p 22 <session-ocid>

    em que:

    • <session-IP>:<session-port> é o endereço IP e o número da porta do ponto final da API do Kubernetes que você especificou ao criar a sessão bastion. Por exemplo, 10.0.0.6:6443.
    • <session-ocid> é o OCID da sessão bastion que você criou.
  5. Execute o comando para criar o túnel SSH em uma estação de trabalho local ou no Cloud Shell, da seguinte forma:
    1. Edite o comando de túnel SSH que você obteve da seguinte forma:

      • Substitua <privateKey> pelo caminho para o arquivo que contém a chave privada do par de chaves SSH especificado para a sessão. Por exemplo, /home/johndoe/.ssh/id_rsa
      • Substitua <localPort> por 6443 ou uma porta livre no seu sistema (uma estação de trabalho local se sua rede estiver pareada com a VCN do cluster ou com o Cloud Shell)
      • Adicione & ao final do comando para fazer com que ele seja executado em segundo plano.
    2. Execute o comando de túnel SSH editado em uma estação de trabalho local ou na janela do Cloud Shell.

      Por exemplo:

      ssh -i /home/johndoe/.ssh/id_rsa -N -L 6443:10.0.0.6:6443 -p 22 ocid1.bastionsession_______oraclecloud.com &

Agora você pode executar operações kubectl no cluster até que o túnel SSH ou a sessão bastion expirem.

Configurando um bastion para fornecer acesso SSH a nós gerenciados

Para que os usuários do cluster tenham acesso SSH a nós gerenciados, os administradores da VCN, os administradores do cluster e os usuários do cluster precisam executar várias etapas, conforme descrito nesta seção.

Etapas do Administrador da VCN

Como administrador da VCN, siga estas etapas para configurar regras de segurança de saída e entrada para permitir que um bastion forneça acesso SSH a nós gerenciados:

  1. Crie uma nova sub-rede para hospedar o bastion, na mesma VCN do cluster ao qual você deseja fornecer acesso.

    Observe que, se você já tiver criado uma sub-rede para hospedar um bastion para acessar o ponto final da API do Kubernetes, poderá reutilizar essa sub-rede em vez de criar uma nova sub-rede. Consulte Configurando um bastion para acessar o ponto final da API do Kubernetes.

  2. Adicione a seguinte regra de segurança de saída TCP/22 à lista de segurança associada à sub-rede bastion.

    Essa regra de segurança de saída permite o tráfego da sub-rede bastion para a sub-rede de nós de trabalho.

    Estado: Destino Protocolo / Dest. Porta Descrição:
    Com monitoramento de estado CIDR de Nós de Trabalho (por exemplo, 10.0.1.0/24) TCP/22 Permitir comunicação entre bastion e nós de trabalho.
  3. Se ainda não estiver presente, adicione a seguinte regra de segurança de entrada TCP/22 a uma lista de segurança nova ou existente associada à sub-rede que hospeda os nós de trabalho.

    Essa regra de segurança de entrada permite o tráfego para a sub-rede do nó de trabalho da sub-rede do bastion.

    Estado: Origem Protocolo / Dest. Porta Descrição:
    Com monitoramento de estado CIDR da sub-rede do Bastion TCP/22 Permitir comunicação entre bastion e nós de trabalho.
    Observação

    Embora não seja o design preferencial da Oracle, você pode usar a mesma sub-rede para o bastion e para os nós de trabalho. Nesse caso, adicione a regra de segurança de saída TCP/22 à lista de segurança associada à sub-rede do nó de trabalho.

Etapas do Administrador do Cluster

Como administrador do cluster, siga estas etapas para configurar um bastion para fornecer acesso SSH a nós gerenciados:

  1. Ative o agente bastion no nó de trabalho ao qual você deseja se conectar por meio do SSH da seguinte forma:
    1. Abra o menu de navegação e clique em Serviços ao Desenvolvedor. Em Contêineres e Artefatos, clique em Clusters do Kubernetes (OKE).
    2. Na página Lista de Clusters, clique no nome do cluster que contém o nó de trabalho ao qual você deseja se conectar.
    3. Em Recursos, clique em Grupos de Nós e clique no nome do pool de nós que contém o nó de trabalho ao qual você deseja se conectar.
    4. Em Recursos, clique em Nós e clique no nome do nó de trabalho ao qual você deseja se conectar.
    5. Na página Detalhes da Instância, exiba a guia Oracle Cloud Agent e alterne o plug-in Ativado do serviço Bastion.

      São necessários até 10 minutos para que a alteração entre em vigor.

    6. Aguarde até que o Status do plug-in do Bastion seja mostrado como Em Execução antes de continuar para a próxima etapa.
  2. Crie um bastion da seguinte forma:
    1. Abra o menu de navegação e clique em Identidade e Segurança.
    2. Clique em Bastion.
    3. Na página Bastion, clique em Criar bastion.
    4. Na caixa de diálogo Criar bastion, defina as seguintes propriedades:
      • Nome do Bastion: Um nome para o bastion. Evite fornecer informações confidenciais. Só há suporte para caracteres alfanuméricos.
      • Rede Virtual na Nuvem de Destino: Especifique a VCN do cluster do Kubernetes ao qual você deseja fornecer acesso.
      • Sub-rede de Destino: A sub-rede para hospedar o bastion, com as regras de segurança de entrada e saída que você configurou.
      • Lista de Permissões do Bloco CIDR: Um ou mais intervalos de endereços em notação CIDR que você deseja permitir para conexão com sessões hospedadas por este bastion. Por exemplo, 0.0.0.0/0 para permitir o acesso pela internet ou um intervalo de endereços mais limitado. Por exemplo, 203.0.113.0/24.
    5. (Opcional) Para alterar o tempo máximo durante o qual qualquer sessão desse bastion pode permanecer ativa, clique em Mostrar Opções Avançadas e informe um valor para Duração Máxima da Sessão.
    6. Clique em Criar Bastion.
    7. Quando o bastion tiver sido criado, clique no nome do bastion para ver informações sobre ele, incluindo seu OCID.

    Para obter mais informações sobre como criar um bastion, consulte Para criar um bastion.

  3. Forneça aos usuários do cluster o OCID do bastion.
  4. Certifique-se de que as políticas de IAM adequadas estejam em vigor para autorizar os usuários do cluster a usar o bastion. Consulte Políticas Obrigatórias do Serviço IAM para Criar e Usar Bastions para Acessar Clusters.

    Se desejado, você também pode configurar políticas do serviço IAM para limitar os recursos que os usuários do cluster podem acessar usando o bastion. Consulte Configurando políticas do serviço IAM para limitar o uso de bastions.

Etapas do Usuário do Cluster

Como usuário do cluster, siga estas etapas para criar uma sessão bastion para fornecer acesso SSH a nós gerenciados:

  1. Crie uma sessão bastion usando a Console ou a CLI da seguinte forma:

    Usando a CLI
    1. Na página Bastion, clique no nome do bastion criado pelo administrador do cluster.
    2. Na página Sessões, clique em Criar sessão.
    3. Na caixa de diálogo Criar sessão, defina as seguintes propriedades:
      • Session tipo: Selecione Managed SSH session.
      • Nome da sessão: Um nome para exibição para a nova sessão. Evite fornecer informações confidenciais.
      • Username: Digite opc.
      • Instância de computação no <compartment name>: Selecione o nome da instância de computação do nó de trabalho na lista de instâncias de computação no compartimento. Se necessário, altere o compartimento para localizar a instância. Somente instâncias ativas são listadas.
      • Chave SSH: Especifique o arquivo de chaves públicas de um par de chaves SSH existente que deseja usar para a sessão ou gere um novo par de chaves SSH e salve a chave privada.
    4. (Opcional) Para alterar o tempo máximo que a sessão pode permanecer ativa, clique em Mostrar Opções Avançadas e informe um valor para Duração Máxima da Sessão.

      Observe que você não altera o valor padrão no campo Porta da instância de computação de destino (a porta padrão já está definida como 22). Além disso, você não especifica endereços IP no campo Endereço IP da instância de computação de destino porque já selecionou as instâncias de computação.

    5. Clique em Criar sessão.
    Usando a CLI
    oci bastion session create-managed-ssh \
      --bastion-id <bastion OCID> \
      --ssh-public-key-file <ssh public key> \
      --target-resource-id <worker node instance OCID> \
      --target-os-username <instance_username>

    Para obter mais informações sobre como criar uma sessão bastion, consulte Para criar uma sessão.

  2. Obtenha o comando para criar um túnel SSH usando a Console ou a CLI da seguinte forma:

    Usando a Console

    Na página Sessões, selecione Copiar Comando SSH no menu Ações (Menu Ações) ao lado da sessão que você acabou de criar.

    Usando a CLI
    oci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'

    O comando de túnel SSH que você obteve tem o seguinte formato:

    ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 <session-ocid>" -p 22 opc@<node-private-ip>

    em que:

    • <session-ocid> é o OCID da sessão bastion que você criou.
    • <node-private-ip> é o endereço IP privado do nó de trabalho que você especificou ao criar a sessão bastion. Por exemplo, 10.0.10.99.
  3. Execute o comando para criar o túnel SSH em uma estação de trabalho local ou no Cloud Shell, da seguinte forma:
    1. Edite o comando de túnel SSH que você obteve da seguinte forma:

      • Substitua <privateKey> pelo caminho para o arquivo que contém a chave privada do par de chaves SSH especificado para a sessão. Por exemplo, /home/johndoe/.ssh/id_rsa
      • Adicione & ao final do comando para que ele seja executado em segundo plano.
    2. Execute o comando de túnel SSH editado em uma estação de trabalho local ou na janela do Cloud Shell.

      Por exemplo:

      ssh -i /home/johndoe/.ssh/id_rsa -o ProxyCommand="ssh -i /home/johndoe/.ssh/id_rsa -W %h:%p -p 22 ocid1.bastionsession_______oraclecloud.com" -p 22 opc@10.0.10.99 &

Agora você pode executar operações nos nós de trabalho até que o túnel SSH ou a sessão bastion expirem.

Configurando políticas do IAM para limitar o uso de bastions

Os administradores de cluster podem configurar políticas do serviço IAM para limitar os recursos que os usuários do cluster podem acessar usando um bastion. Por exemplo, um requisito comum é restringir os usuários do cluster ao uso de um bastion para acessar apenas o ponto final da API do Kubernetes de um cluster, em vez de também poder acessar nós de trabalho via SSH.

O exemplo de política a seguir permite que os usuários do grupo cluster-users criem, estabeleçam conexão e encerrem sessões bastion apenas para pontos finais da API do Kubernetes (na sub-rede 10.0.0.11/32, na porta 6443), no compartimento ABC:

Allow group cluster-users to use bastion in compartment ABC 
Allow group cluster-users to manage bastion-session in compartment ABC where ALL {target.bastion.ocid='ocid1.bastion.xxx', target.bastion-session.type='port_forwarding', target.bastion-session.ip in ['10.0.0.11/32'], target.bastion-session.port='6443'}
Allow group cluster-users to read vcn in compartment ABC
Allow group cluster-users to read subnet in compartment ABC

O exemplo pressupõe:

  • Um bastion já foi criado.
  • As redes e os nós de trabalho estão no mesmo compartimento que o bastion.
  • O acesso à rede deve ser definido com o mínimo necessário.