Gerenciamento da proteção do tráfego de saída em clusters de VPC
Nuvem Privada Virtual 4.15 e mais tarde
Analise as seguintes opções para gerenciar a proteção do tráfego de saída em Red Hat OpenShift on IBM Cloud Clusters de VPC. Você pode permitir todo o acesso de saída ou permitir seletivamente o tráfego de saída para os componentes de que seus aplicativos precisam.
Em muitos dos cenários a seguir, você tem a opção de adicionar regras personalizadas ao seu grupo de segurança " kube-<clusterID> como uma forma de permitir o tráfego de saída para recursos específicos. Observe que as regras
que você adiciona ao grupo de segurança ' kube-<clusterID> são removidas se você executar o ' ibmcloud oc security-group reset posteriormente. A redefinição dos grupos de segurança restaura as regras padrão e
remove as regras que você adicionou.
Desativação da proteção do tráfego de saída
Nuvem Privada Virtual 4.15 e mais tarde
Analise as seguintes opções para desativar as proteções de tráfego de saída para novos clusters.
Você pode ativar e desativar a proteção do tráfego de saída usando os comandos " outbound traffic protection enable e " disable. Talvez você queira alternar entre as duas configurações quando estiver deixando
de permitir todo o tráfego de saída.
Opção 1: Desativar a proteção do tráfego de saída quando você cria um cluster
Essa opção permite todas as conexões de rede de saída.
- No console, selecione a opção Allow outbound traffic (Permitir tráfego de saída ).
- Na CLI, quando você criar um cluster usando o comando'
cluster create vpc-gen2, especifique a opção '--disable-outbound-traffic-protection. - No Terraform, especifique a opção "
disable_outbound_traffic_protection = true. - Na API, especifique a opção "
disableOutboundTrafficProtection=true.
Opção 2: permitir o tráfego de saída por meio de um grupo de segurança personalizado
Antes de criar o cluster, crie um grupo de segurança personalizado em sua VPC que permita o acesso ao site ou serviço externo que o cluster precisa acessar. Em seguida, anexe esse grupo de segurança ao seu cluster durante a criação do cluster.
- No console, especifique seu grupo de segurança personalizado.
- Na CLI, quando você criar um cluster usando o comando'
cluster create vpc-gen2, especifique a opção '--cluster-security-group <security-group-ID>e inclua o ID do grupo de segurança personalizado. - No Terraform, especifique a opção "
security_groupse inclua seu grupo personalizado.
Desativar a proteção do tráfego de saída para clusters existentes
Nuvem Privada Virtual 4.15 e mais tarde
Analise suas opções para desativar a proteção do tráfego de saída após o provisionamento de um cluster.
Opção 1: Desativar a proteção do tráfego de saída na CLI
Essa opção permite todas as conexões de rede externas.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
Opção 2: Adicionar uma regra de grupo de segurança ao grupo de segurança padrão do trabalhador do cluster
Você pode adicionar uma regra de grupo de segurança ao grupo de segurança do funcionário do cluster (kube-<clusterID>) que permite o acesso ao site externo específico. Repita essa etapa para cada site ou sub-rede que seu
cluster precisa acessar. Para obter mais informações, consulte Cenários de exemplo para permitir seletivamente o tráfego de saída.
ibmcloud is sg-rulec kube-CLUSTERID outbound icmp_tcp_udp --remote IP-ADDRESS-OR-SUBNET
Ativação da proteção do tráfego de saída para clusters existentes
Nuvem Privada Virtual 4.15 e mais tarde
Para ativar a proteção de saída para seus clusters 4.15 existentes, execute o seguinte comando. Observe que a ativação da proteção do tráfego de saída bloqueia todo o tráfego de saída.
ibmcloud oc vpc outbound-traffic-protection enable --cluster CLUSTER
Exemplos de cenários para permitir seletivamente o tráfego de saída
Analise as seções a seguir para obter instruções sobre como permitir o tráfego de saída para recursos e componentes comuns, como registros de contêineres externos como ' quay.io, o Red Hat Marketplace e o OperatorHub. Observe que,
quando você permite seletivamente o tráfego de saída criando regras de grupo de segurança personalizadas, suas alterações serão removidas se você redefinir o grupo de segurança para as configurações padrão executando o comando " ibmcloud oc security-group reset.
Acesso a imagens de registros de contêineres externos, como DockerHub ou " quay.io
Para acessar imagens de registros como DockerHub ou " quay.io ou " registry.redhat.com, escolha uma das seguintes opções.
- Desativar a proteção do tráfego de saída.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER - Espelhe as imagens de que seu aplicativo precisa em '
icr.io. Extraia, marque e envie essas imagens para IBM Cloud Container Registry. Para obter mais informações, consulte Empurrando imagens para IBM Cloud Container Registry.
Permitir o tráfego de saída para o Red Hat Marketplace e OperatorHub
As etapas a seguir ativam todo o tráfego de saída. Se você não quiser ativar essa função, pode espelhar as imagens Red Hat Marketplace e OperatorHub, necessárias para o seu aplicativo, no seu próprio icr.io.
-
Desativar a proteção do tráfego de saída.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER -
Faça o patch OperatorHub em seu cluster para permitir que os pods sejam iniciados.
oc patch OperatorHub cluster --type json -p '[{"op": "remove", "path": "/spec/disableAllDefaultSources"}]'
Para reverter essas alterações posteriormente e desativar OperatorHub, conclua as etapas a seguir.
-
Habilite a proteção do tráfego de saída.
ibmcloud oc vpc outbound-traffic-protection enable --cluster CLUSTER -
Corrigir OperatorHub em seu cluster para desativar os pods
oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
Permitir o tráfego de saída para Image Streams
Para acessar os fluxos de imagem do seu cluster, escolha uma das seguintes opções.
-
Espelhe as imagens necessárias no registro '
icr.io. Para obter mais informações, consulte Empurrando imagens para IBM Cloud Container Registry. -
Desativar a proteção do tráfego de saída.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER -
Adicione uma regra de grupo de segurança ao grupo de segurança "
kube-<clusterID>para os endereços IP do fluxo de imagens que você deseja usar. Observe que os endereços IP dos fluxos de imagem podem mudar.ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min PORT --port-max PORT --remote IP-OR-CIDR
Permissão de tráfego de saída para monitoramento remoto da saúde com Telemetria
Para permitir o monitoramento remoto da integridade, você deve desativar a proteção do tráfego de saída executando o seguinte comando.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
Acesso a clusters 4.15 e ao console da Web pelo VPE
Você pode configurar Kubernetes para permitir o acesso ao cluster por meio do gateway vpe privado. Essa opção está disponível tanto para clusters de VPC privados quanto para públicos e privados. Como o acesso é feito por meio do endpoint privado, o cliente deve configurar uma VPN do cliente para sua VPC para acessar o cluster.
A partir dos clusters 4.15, é necessária uma regra de grupo de segurança adicional para que o acesso ao VPE funcione. A regra de grupo de segurança adicional é necessária tanto para clusters somente privados quanto para clusters com endpoints públicos e privados.
-
Liste seus servidores VPN.
ibmcloud is vpn-servers -
Obtenha os detalhes de seu servidor VPN.
ibmcloud is vpn-server SERVER -
Obtenha o " Pool de IPs de clientes de seu servidor VPN.
ibmcloud is vpn-server | grep "Client IP pool" -
Obtenha os detalhes de seu cluster e anote a porta VPE.
ibmcloud ks cluster get --cluster CLUSTERID -
Inicie sua VPN no cliente.
-
Acesse seu cluster via VPE.
ibmcloud ks cluster config --admin --cluster CLUSTERID --endpoint vpe -
Listar pods. Observe que esse comando falha porque o cliente não pode acessar o cluster via VPN por meio do gateway VPE.
kubectl get pods -A -
Adicione uma regra de grupo de segurança ao "
kube-vpegw-<clusterID>para sua VPN. O remoto, nesse caso, vem do IP CIDR do cliente da VPN.ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min PORT --port-max PORT --remote IP-OR-CIDRExemplo de comando.
ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min 30829 --port-max 30829 --remote 192.168.192.0/22 -
Listar pods.
kubectl get pods -A
Permitir o tráfego de saída para webhooks
Se estiver usando webhooks que contatam um URL ou serviço externo ao cluster, você deverá adicionar regras de grupo de segurança que permitam o tráfego de saída dos trabalhadores do cluster para o URL ou serviço externo. Como alternativa, você pode desativar completamente a proteção do tráfego de saída.
Normalmente, os webhooks de admissão que usam referências de serviços de cluster não exigem nenhuma alteração.
No exemplo a seguir, um webhook de admissão que se conecta a um serviço de cluster normalmente não exige nenhuma alteração porque o mestre se conecta ao serviço por meio da conexão Konnectivity, que é permitida por padrão. Uma exceção seria se os pods que implementam esse serviço de cluster precisassem se conectar a um URL ou a algum serviço externo. Em caso afirmativo, permita que esses pods acessem o URL ou o serviço externo, conforme mostrado neste exemplo.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: my-cluster-service.webhook.io
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
caBundle: ABCDEFG...
service:
name: my-admission-webhook
namespace: default
path: /validate
port: 443
...
No entanto, se os webhooks de admissão usarem um URL, serão necessárias regras de grupo de segurança adicionais.
Exemplo de webhook que se conecta a um URL.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: my-url.webhook.io
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
caBundle: ABCDEFG...
url: https://webhook.ibm.com:20001/validate
...
Para permitir o acesso ao serviço ou URL externo para seu webhook, você pode escolher uma das seguintes opções
-
Desative a proteção do tráfego de saída executando o seguinte comando.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER -
Adicione regras de grupo de segurança de saída ao grupo de segurança '
kube-<clusterID>para permitir a conexão dos trabalhadores do cluster. No exemplo anterior, é usado o serviço "webhook.ibm.comna porta "20001.- Procure os IPs para acessar o URL usando
dig.
dig +short URL ``` Exemplo de comando. ```sh {: pre} dig +short webhook.ibm.com ``` Exemplo de saída ```sh {: screen} 1.2.3.4 4.5.6.7 ``` 1. Crie uma regra para cada endereço IP retornado. ```sh {: pre} ibmcloud is sg-rulec kube-<clusterID> outbound icmp_tcp_udp --remote <IP-address-or-subnet> ``` Exemplo de comandos. ```sh {: pre} ibmcloud is sg-rulec kube-CLUSTERID outbound tcp --port-min 20001 --port-max 20001 --remote 1.2.3.4 ibmcloud is sg-rulec kube-CLUSTERID outbound tcp --port-min 20001 --port-max 20001 --remote 4.5.6.7 ``` - Procure os IPs para acessar o URL usando
Para obter mais informações, consulte Controle Dinâmico de Admissão
Permitir o tráfego de saída para um serviço público
Se o serviço ou os serviços externos que estão sendo chamados pelo seu aplicativo tiverem um pequeno conjunto de IPs/CIDRs usados para hospedar esse serviço que não muda com muita frequência, você poderá permitir seletivamente o acesso de
saída a esses IPs ou CIDRs no seu grupo de segurança " kube-clusterID.
O exemplo a seguir usa as APIs github.com em " api.github.com.
-
Localize os IPs programaticamente por '
curl.curl -sS -H "Accept: application/vnd.github+json" https://api.github.com/meta | jq '.api' -
Adicione cada um dos CIDRs que você encontrou na etapa anterior como destino de uma regra de grupo de segurança de saída no grupo de segurança "
kube-clusterID. Como alternativa, é possível criar um grupo de segurança personalizado que você adiciona aos trabalhadores do cluster no momento da criação do cluster.ibmcloud is sg-rulec kube-<clusterID> outbound icmp_tcp_udp --remote <IP-address-or-subnet>
Para obter mais informações, consulte Sobre os endereços IP GitHub's.
Considerações sobre VPCs de hub e spoke com proteção de tráfego de saída
Em um modelo hub and spoke, apenas o cluster VPC do hub é usado para resolução de DNS. Os clusters spoke acessam o DNS por meio do hub. Na maioria das vezes, os clusters de hub e spoke estão em VPCs diferentes, que são conectados via Transit Gateway.
Na versão 4.15 e em clusters posteriores, o modelo hub and spoke não funciona sem ajustes nos grupos de segurança de cada um. Esses ajustes permitem o tráfego entre o hub e as VPCs de spoke.
-
Atualize os clusters na VPC de spoke para que eles possam acessar a VPC de hub adicionando regras ao grupo de segurança "
kube-<clusterID>para cada cluster de spoke. Certifique-se de adicionar uma regra de saída a cada CIDR da sub-rede VPC em que os funcionários do cluster do hub estão implantados. Por exemplo, se um spoke estiver se conectando a um único hub e esse hub tiver funcionários em três zonas, três regras deverão ser adicionadas ao grupo de segurança "kube-<clusterID>do spoke, uma para cada sub-rede.ibmcloud is sg-rulec kube-<spoke-clusterID> outbound icmp_tcp_udp --remote <hub-subnet-CIDR> -
Atualize os clusters do hub para permitir o tráfego dos raios adicionando regras ao grupo de segurança do gateway VPE compartilhado do hub (
kube-vpegw-vpcID). Como alternativa, se você usar seus próprios grupos de segurança personalizados para os gateways VPE compartilhados, adicione regras a esses grupos de segurança personalizados. -
Execute o seguinte comando para localizar os gateways VPE e, em seguida, examine os detalhes do gateway para encontrar o grupo de segurança associado. Anote o ID do grupo de segurança para adicionar regras a ele na próxima etapa.
ibmcloud is egs -
Adicione uma regra de entrada de cada sub-rede VPC na qual os spoke workers estão implantados. Por exemplo, se os raios forem implantados em três zonas diferentes, mas em uma única sub-rede em cada uma dessas zonas, três regras serão adicionadas aos grupos de segurança do Gateway VPE compartilhado do hub.
ibmcloud is sg-rulec kube-vpegw-<hub-vpcID> inbound icmp_tcp_udp --remote <spoke-subnet-CIDR>
Permitir o tráfego temporário para o servidor de API do cluster pela rede pública
Os trabalhadores do cluster da VPC usam a rede privada para se comunicar com o mestre do cluster. Anteriormente, para clusters de VPC que tinham o endpoint de serviço público ativado, se a rede privada estivesse bloqueada ou indisponível, os trabalhadores do cluster poderiam voltar a usar a rede pública para se comunicar com o mestre do cluster.
Em clusters 4.15 e posteriores, voltar para a rede pública não é uma opção porque o tráfego público de saída dos trabalhadores do cluster está bloqueado. Talvez você queira desativar a proteção do tráfego de saída para permitir essa opção
de backup de rede pública; no entanto, há uma alternativa melhor. Em vez disso, se houver um problema temporário com a conexão entre o trabalhador e o mestre na rede privada, nesse momento, você poderá adicionar uma regra de grupo de segurança
temporária ao grupo de segurança " kube-clusterID para permitir o tráfego de saída para a porta " apiserver do mestre do cluster. Mais tarde, quando o problema for resolvido, você poderá remover a regra
temporária.
Você pode escolher uma das seguintes opções para permitir o tráfego pela rede pública se a rede privada estiver inoperante.
-
Adicione uma regra de grupo de segurança ao grupo de segurança "
kube-clusterIDpara permitir o tráfego para o servidor de API.- Obtenha os detalhes de seu cluster e anote a porta do servidor de API.
ic ks cluster get --cluster <clusterID> ``` Exemplo de saída em que a porta do servidor da API é " `30685`. ```sh {: screen} Name: prestg-sbd-vpc-4.15 ID: coekl4a107ovqfndhh60 ... Public Service Endpoint URL: https://c100-e.containers.cloud.ibm.com:30685 Private Service Endpoint URL: https://c100.private.containers.cloud.ibm.com:30685 ... ``` 1. Adicione uma regra de grupo de segurança de saída de seu " `kube-<clusterID>` para " `0.0.0.0/0` para permitir todo o acesso à rede pública. ```sh {: pre} ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min <API port> --port-max <API port> --remote 0.0.0.0/0 ``` Exemplo de comando com uma porta de servidor de API de ' `30685`. ```sh {: pre} ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min 30685 --port-max 30685 --remote 0.0.0.0/0 ``` -
Desativar a proteção do tráfego de saída.
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
Verificação da integração do Sysdig em clusters RHCOS somente privados
Se os pods sysdig-agent estiverem em CrashLoopBackOff em um cluster somente privado que usa workers RHCOS, você poderá desativar a proteção de tráfego de saída ou atualizar o agente Sysdig para usar o driver eBPF.
Para obter mais informações, consulte Por que os pods sysdig-agent estão em CrashLoopBackOff em um cluster RHCOS somente privado?