Quando várias aplicações são executadas no mesmo cluster Kubernetes, seus pods precisam de endpoints estáveis para comunicação. Os pods possuem endereços IP independentes, mas são criados e excluídos rapidamente, o que torna as conexões diretas não confiáveis. Um Service do Kubernetes fornece um endpoint de rede fixo que roteia o tráfego para os pods, independentemente das mudanças no ciclo de vida deles.
Adicione um Service a uma aplicação implantada no Enterprise Distributed Application Service (EDAS) para expor a aplicação dentro ou fora do cluster.
Como os Services funcionam
Uma aplicação implantada em um cluster do Container Service for Kubernetes (ACK) por meio do EDAS é executada como um grupo de pods que compartilham a mesma imagem docker. Cada pod tem seu próprio endereço IP, mas os pods são criados e excluídos rapidamente. Um Service do Kubernetes resolve esse problema ao fornecer um endpoint estável que roteia automaticamente o tráfego para os pods. Os Services também desacoplam frontends de backends, permitindo uma arquitetura de microsserviços com baixo acoplamento.
Tipos de Service
O EDAS oferece suporte a dois tipos de Service:
|
Tipo |
Escopo de acesso |
Caso de uso |
|
ClusterIP (padrão) |
Apenas interno ao cluster |
Comunicação entre Services no mesmo cluster |
|
NodePort |
Acesso externo via |
Acesso à aplicação por sistemas ou usuários externos usando o endereço IP e uma porta de um nó |
ClusterIP: Expõe a aplicação em um endereço IP interno do cluster. Apenas cargas de trabalho dentro do mesmo cluster podem alcançar este Service. Use um Service ClusterIP quando os Services da aplicação dentro do cluster precisarem acessar uns aos outros, pois eles não conseguem se comunicar por meio de uma instância de SLB voltada para a Internet ou interna.
NodePort: Expõe a aplicação em uma porta estática em todos os nós do cluster. O Kubernetes cria automaticamente um Service ClusterIP de suporte e roteia o tráfego do NodePort para ele.
Você também pode usar uma instância de Server Load Balancer (SLB) voltada para a Internet ou uma instância de SLB interna para expor a aplicação.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma aplicação implantada em um cluster Kubernetes no EDAS
Acesso ao console do EDAS
Adicionar um Service a uma aplicação
Faça login no console do EDAS.
No painel de navegação à esquerda, escolha Application Management > Applications.
Na barra de navegação superior, selecione uma região e um Microservices Namespace. Na lista suspensa Cluster Type, selecione Kubernetes Cluster. Clique em nome da aplicação de destino.
-
Na página Application Overview, na seção Access configuration, clique em ícone
ao lado de service.NotaSe já existir um Service, o nome e o endereço IP dele serão exibidos. Clique em ícone
para modificar a porta ou o protocolo, ou clique em ícone
para remover o Service. -
Na caixa de diálogo Service, configure os seguintes parâmetros e clique em OK.

Parâmetro
Descrição
Service Name
Nome exclusivo para o Service. Deve ter de 2 a 32 caracteres e pode conter letras minúsculas, dígitos e hifens (-). Deve começar com uma letra e terminar com uma letra ou um dígito.
Service Type
Escopo de acesso do Service. Valores válidos:
Cluster IP: Expõe o Service em um endereço IP interno do cluster. O Service é acessível apenas de dentro do cluster. Este é o valor padrão.
Node Port: Expõe o Service em uma porta estática em cada nó. Clientes externos se conectam via
<NodeIP>:<NodePort>. Um Service ClusterIP é criado automaticamente para dar suporte a este Service NodePort.
External Traffic Policy
Controla como o tráfego externo ao cluster é distribuído para os pods. Valores válidos:
Local: Roteia o tráfego apenas para os pods no nó onde o Service está implantado.
Cluster: Roteia o tráfego para pods em outros nós do cluster.
Service Port
Porta na qual o Service escuta. Outros Services ou clientes externos usam esta porta para se conectar. Valores válidos: 1 a 65535.
Container Port
Porta na qual o processo da aplicação escuta dentro do contêiner. Esta porta é definida pela aplicação. Valores válidos: 1 a 65535.
Node Port
Porta em cada nó usada para expor o Service externamente. Esta porta é definida pela aplicação. Valores válidos: 30000 a 32767. Este parâmetro está disponível apenas quando Service Type está definido como Node Port.
Protocol
Protocolo de transporte. Valores válidos: TCP (padrão), UDP.
Regras de mapeamento de portas
Um único Service suporta múltiplos mapeamentos de porta. Para atribuir mapeamentos de porta diferentes a nomes de Service distintos, repita as etapas 4 e 5 para criar Services adicionais.
Ao adicionar vários mapeamentos de porta ao mesmo Service, cada mapeamento deve ter uma combinação exclusiva de porta de Service e protocolo. Por exemplo,
80|8080|TCPe80|8081|TCPnão podem ser salvos porque ambos os mapeamentos compartilham a mesma porta de Service (80) e protocolo (TCP), e a mensagem "Port mapping has duplicate entries" é exibida.
Verificar o resultado
Após adicionar o Service, verifique a conectividade acessando a aplicação de dentro do cluster usando o endereço IP do Service.
O exemplo a seguir testa uma aplicação web. As etapas de verificação para outros tipos de aplicação podem variar.
Faça login no console do ACK.
No painel de navegação à esquerda, clique em Clusters.
-
Na página Clusters, localize o cluster de destino e escolha na coluna Actions.
O Cloud Shell abre automaticamente na parte inferior da página e carrega o arquivo kubeconfig do cluster.
-
Liste todos os pods no cluster:
kubectl get podsSaída de exemplo:
NAME READY STATUS RESTARTS AGE store-pre-****-group-1-19-****7569b-f7*** 1/1 Running 0 28h store-prod-***duct-group-1-1-****7f894-zh*** 1/1 Running 0 28h -
Abra uma sessão de shell em um dos pods:
Substitua
<pod-name>pelo nome real de um pod obtido na saída. Exemplo:kubectl exec -it <pod-name> /bin/shkubectl exec -it store-prod-***duct-group-1-1-****7f894-zh*** /bin/sh -
Envie uma solicitação para o endereço IP e a porta do Service:
Substitua
<service-ip>e<service-port>pelos valores reais. Exemplo:wget <service-ip>:<service-port>wget 10.XX.XX.XX:8081Se a conexão for bem-sucedida, uma saída semelhante à seguinte será retornada:
Connecting to 10.XX.XX.XX:8081 (10.XX.XX.XX:8081) index.html 100% |*******************************************************| 2203 0:00:00 ETA
Este exemplo verifica uma aplicação web. Para outros tipos de aplicação, a saída e o método de verificação diferem dependendo do Service.