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.

Exponha um aplicativo em IBM Cloud Kubernetes Service usando o NodePort
Exponha um aplicativo usando NodePort

  1. 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.

  2. 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.

  3. kube-proxy roteia a solicitação para o serviço NodePort do Kubernetes para o app.

  4. 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

Para usar um NodePort,

  1. 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
    name Substitua <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.
    labels Substitua <my-label-key> e <my-label-value> pelo rótulo que deseja usar para o serviço.
    selector Substitua <my-selector-key> e <my-selector-value> pelo par de chave/valor usado na seção spec.template.metadata.labels do YAML de implementação. Para associar o serviço com a implementação, o seletor deve corresponder aos rótulos de implementação.
    port Substitua <8081> pela porta na qual o serviço atende.
    nodePort Opcional: 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 comando oc get svc. Os NodePorts em uso aparecem sob o campo Portas.
  2. Salve o arquivo de configuração atualizado.

  3. 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.

    1. 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}