Testando o acesso a apps com NodePorts
Nuvem Privada Virtual Infraestrutura clássica Satellite
Disponibilize seu app conteinerizado para acesso à Internet usando o endereço IP público de qualquer nó do trabalhador em um cluster Red Hat OpenShift e expondo um NodePort. Use essa opção para teste no Red Hat® OpenShift® on IBM Cloud® e para acesso público de curto prazo.
Sobre NodePorts
Exponha uma porta pública em seu nó do trabalhador e use o endereço IP público do nó do trabalhador para acessar seu serviço no cluster publicamente por meio da Internet.
Ao expor seu app criando um serviço do Kubernetes do tipo NodePort, um NodePort no intervalo de 30.000 a 32.767 e um endereço IP interno do cluster são designados ao serviço. O serviço NodePort serve como o ponto de entrada externo para solicitações
recebidas para seu app. O NodePort designado é exposto publicamente nas configurações de kubeproxy de cada nó do trabalhador no cluster. Cada nó do trabalhador inicia o atendimento no NodePort designado para solicitações recebidas
para o serviço. Para acessar o serviço na Internet, é possível utilizar o endereço IP público de qualquer nó do trabalhador que foi designado durante a criação do cluster e o NodePort no formato <IP_address>:<nodeport>.
Para acessar o serviço na rede privada, use o endereço IP privado de qualquer nó do trabalhador em vez do endereço IP público.
O diagrama a seguir mostra como a comunicação é direcionada da Internet para um app quando um serviço NodePort está configurado.
-
Uma solicitação é enviada para seu app usando o endereço IP público do seu nó do trabalhador e o NodePort no nó do trabalhador.
-
A solicitação é encaminhada automaticamente para o endereço IP e a porta do cluster interno do serviço NodePort. O endereço IP do cluster interno é acessível somente dentro do cluster.
-
kube-proxyroteia a solicitação para o serviço NodePort do Kubernetes para o app. -
A solicitação é encaminhada para o endereço IP privado do pod no qual o app é implementado. Se diversas instâncias do app são implementadas no cluster, o serviço NodePort roteia as solicitações entre os pods de app.
O endereço IP público do nó do trabalhador não é permanente. Quando um nó do trabalhador é removido ou recriado, um novo endereço IP público é designado ao nó do trabalhador. É possível usar o serviço do NodePort para testar o acesso público para o seu app ou quando o acesso público for necessário apenas para uma quantia pequena de tempo. Quando precisar de um endereço IP público estável e mais disponibilidade para seu serviço, exponha seu app usando um serviço de balanceador de carga de rede (NLB) ou o Ingress.
Ativando o acesso a um app usando um serviço NodePort
Publique seu aplicativo como um serviço do Kubernetes NodePort.
Como os nós do trabalhador em clusters de VPC não têm um endereço IP público, só será possível acessar um app através de um NodePort se você estiver conectado à rede privada VPC, como por meio de uma conexão VPN. Para acessar um app por meio da Internet, deve-se usar um serviço de balanceador de carga do VPC ou do Ingress como alternativa.
Se você ainda não tiver um app pronto, será possível usar um app de exemplo do Kubernetes chamado Guestbook.
Antes de Iniciar
- Acesse o seu Red Hat OpenShift cluster.
- Clusters VPC: Permita solicitações de tráfego que sejam roteadas para NodePorts nos seus nós de trabalho. Para obter mais informações, consulte Noções básicas sobre redes de VPC de cluster seguras por padrão e Criação e gerenciamento de grupos de segurança de VPC.
Para usar um NodePort,
-
No arquivo de configuração do app, defina uma seção serviço.
Para o exemplo Guestbook, uma seção de serviço de front-end existe no arquivo de configuração. Para disponibilizar o app Guestbook externamente, inclua o tipo NodePort e uma NodePort no intervalo de 30000 a 32767 na seção de serviço de front-end.
Exemplo
apiVersion: v1 kind: Service metadata: name: <my-nodeport-service> labels: <my-label-key>: <my-label-value> spec: selector: <my-selector-key>: <my-selector-value> type: NodePort ports: - port: <8081> # nodePort: <31514>Entendendo os componentes de serviço NodePort Componente Descrição nameSubstitua <my-nodeport-service>por um nome para o serviço NodePort. Saiba mais sobre como proteger suas informações pessoais quando trabalhar com recursos do Kubernetes.labelsSubstitua <my-label-key>e<my-label-value>pelo rótulo que deseja usar para o serviço.selectorSubstitua <my-selector-key>e<my-selector-value>pelo par de chave/valor usado na seçãospec.template.metadata.labelsdo YAML de implementação. Para associar o serviço com a implementação, o seletor deve corresponder aos rótulos de implementação.portSubstitua <8081>pela porta na qual o serviço atende.nodePortOpcional: substitua <31514>por um NodePort no intervalo de 30000 a 32767. Não especifique um NodePort que já esteja em uso por outro serviço. Se nenhum NodePort for designado, um aleatório será designado para você.
Para especificar um NodePort e ver quais NodePorts já estão em uso, execute o comandooc get svc. Os NodePorts em uso aparecem sob o campo Portas. -
Salve o arquivo de configuração atualizado.
-
Quando o app for implementado, será possível usar o endereço IP público de qualquer nó do trabalhador e o NodePort para formar a URL pública para acessar o app em um navegador. Se os nós do trabalhador estão conectados somente a uma VLAN privada, um serviço NodePort privado foi criado e pode ser acessado por meio de um endereço IP privado do nó do trabalhador.
- Obtenha o endereço IP público para um nó do trabalhador no cluster. Para acessar o nó do trabalhador em uma rede privada ou ter um cluster de VPC, obtenha o endereço IP privado como alternativa.
ibmcloud oc worker ls --cluster CLUSTER_NAME ``` Saída ```sh {: screen} ID Public IP Private IP Size State Status prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w1 192.0.2.23 10.100.10.10 u3c.2x4 normal Ready prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w2 192.0.2.27 10.100.10.15 u3c.2x4 normal Ready ``` 2. Se um NodePort aleatório foi designado, descubra qual foi designado. ```sh {: pre} oc describe service <service_name> ``` Saída ```sh {: screen} NAME: <service_name> Namespace: default Labels: run=<deployment_name> Selector: run=<deployment_name> Type: NodePort IP: 10.10.10.8 Port: <unset> 8080/TCP NodePort: <unset> 30872/TCP Endpoints: 172.30.171.87:8080 Session Affinity: None No events. ``` Neste exemplo, o NodePort é `30872`. Se a seção **Terminais** exibir `<none>`, verifique o `<selectorkey>` e `<selectorvalue>` que são usados na seção `spec.selector` do serviço NodePort. Certifique-se de que eles sejam os mesmos que o par de _chave/valor_ usado na seção `spec.template.metadata.labels` do YAML de implementação. {: note} 3. Forme a URL com um dos endereços IP do nó do trabalhador e o NodePort. Exemplo: `http://192.0.2.23:30872`. Para clusters de VPC, deve-se estar conectado à rede privada, como por meio de uma conexão de VPN, para acessar o endereço IP privado do nó do trabalhador e NodePort. {: note}