Como faço para expor os Serviços do Kubernetes que estão em execução no meu cluster do Amazon EKS?
Quero expor os Serviços do Kubernetes que estão em execução no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).
Resolução
Para expor os Serviços do Kubernetes que estão em execução no seu cluster do Amazon EKS, primeiro crie uma aplicação de amostra. Em seguida, aplique o tipo de Serviço Kubernetes ClusterIP, NodePort ou LoadBalancer à sua aplicação de amostra. Para mais informações, consulte Tipo de serviço no site do Kubernetes.
Crie uma aplicação de amostra
Conclua as etapas a seguir:
-
Defina e aplique um arquivo de implantação no Kubernetes. O comando de exemplo a seguir cria um arquivo chamado nginx-deployment.yaml e, em seguida, cria um ReplicaSet que ativa até dois pods nginx:
cat <<EOF > nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 EOF -
Para criar a implantação, execute o seguinte comando:
kubectl apply -f nginx-deployment.yaml -
Para verificar se seus pods estão em execução e têm seus próprios endereços IP internos, execute o seguinte comando:
kubectl get pods -l 'app=nginx' -o wide | awk {'print $1" " $3 " " $6'} | column -tExemplo de saída:
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Aplicar o tipo de serviço
Decida como você deseja expor sua aplicação e, em seguida, aplique o tipo de serviço apropriado. Para mais informações sobre cada tipo de serviço, consulte tipo: ClusterIP, tipo: NodePort e tipo: LoadBalancer no site do Kubernetes.
Tipo de serviço ClusterIP
Conclua as etapas a seguir:
-
Crie um arquivo chamado clusterip.yaml.
-
Defina tipo como ClusterIP conforme mostrado no exemplo a seguir:
cat <<EOF > clusterip.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-cluster-ip spec: type: ClusterIP selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 EOF -
Use um comando declarativo ou imperativo para criar o objeto ClusterIP no Kubernetes.
Para criar o objeto e aplicar o arquivo clusterip.yaml, execute o comando declarativo a seguir:kubectl create -f clusterip.yamlExemplo de saída:
service/nginx-service-cluster-ip created>/code>-ou-
Para expor uma Implantação do tipo ClusterIP, execute o comando imperativo a seguir:
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ipObservação: o comando expose cria um serviço, mas não cria um arquivo YAML. No entanto, o kubectl traduz seu comando imperativo em uma Implantação declarativa do Kubernetes.
Exemplo de saída:service "nginx-service-cluster-ip" exposed -
Para obter o endereço CLUSTER-IP, execute o seguinte comando:
kubectl get service nginx-service-cluster-ipExemplo de saída:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-cluster-ip ClusterIP 10.100.12.153 <none> 80/TCP 23s -
Para usar o endereço CLUSTER-IP para acessar a aplicação, execute o seguinte comando:
curl -silent 10.100.12.153:80 | grep titleObservação: para acessar o Serviço, é preciso acessar um nó de processamento ou estar dentro do contêiner de um pod.
-
Para excluir o serviço ClusterIP, execute o seguinte comando:
kubectl delete service nginx-service-cluster-ipExemplo de saída:
service "nginx-service-cluster-ip" deleted
Tipo de serviço NodePort
Conclua as etapas a seguir:
-
Crie um arquivo chamado nodeport.yaml.
-
Defina o tipo como NodePort conforme mostrado no exemplo a seguir:
cat <<EOF > nodeport.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-nodeport spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 EOF -
Use um comando declarativo ou imperativo para criar o objeto NodePort no Kubernetes.
Para criar o objeto e aplicar o arquivo nodeport.yaml, execute o comando declarativo a seguir:kubectl create -f nodeport.yaml-ou-
Para expor uma Implantação do tipo NodePort, execute o comando imperativo a seguir:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeportExemplo de saída:
service/nginx-service-nodeport exposed -
Para obter informações sobre o nginx-service, execute o seguinte comando:
kubectl get service/nginx-service-nodeportExemplo de saída:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27sImportante: o NodePort cria um endereço IP de Serviço que pode ser acessado no cluster e usa a porta especificada para expor o serviço em cada nó. A saída do comando anterior mostra que o tipo de serviço NodePort está exposto externamente na porta da instância Amazon Elastic Compute Cloud (Amazon EC2) disponível do nó de processamento. Antes de acessar NodeIP:NodePort de fora do cluster, defina os grupos de segurança do nó para permitir o tráfego de entrada pela porta listada na saída.
-
Para nós que estão em uma sub-rede pública e acessíveis pela Internet, verifique o endereço IP público do nó:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -tExemplo de saída:
NAME STATUS EXTERNAL-IP ip-10-0-3-226.eu-west-1.compute.internal Ready 1.1.1.1 ip-10-1-3-107.eu-west-1.compute.internal Ready 2.2.2.2-ou-
Para nós que estão em uma sub-rede privada e só podem ser acessados por meio de uma nuvem privada virtual (VPC), verifique o endereço IP privado do nó:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -tExemplo de saída:
NAME STATUS INTERNAL-IP ip-10-0-3-226.eu-west-1.compute.internal Ready 10.0.3.226 ip-10-1-3-107.eu-west-1.compute.internal Ready 10.1.3.107 -
Para usar o Node IP e o NodePort para acessar a aplicação, execute o seguinte comando:
curl -silent <Public/PrivateNodeIP>:30994 | grep title -
Para excluir o Serviço NodePort, execute o seguinte comando:
kubectl delete service nginx-service-nodeportExemplo de saída:
service "nginx-service-nodeport" deleted
Tipo de serviço LoadBalancer
Conclua as etapas a seguir:
-
Crie um arquivo chamado loadbalancer.yaml.
-
Defina o tipo como LoadBalancer conforme mostrado no exemplo a seguir:
cat <<EOF > loadbalancer.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-loadbalancer spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 EOF -
Para aplicar o arquivo loadbalancer.yaml, execute o comando a seguir:
kubectl create -f loadbalancer.yamlExemplo de saída:
service/nginx-service-loadbalancer created-ou-
Para expor uma Implantação do tipo LoadBalancer, execute o seguinte comando:
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancerExemplo de saída:
service "nginx-service-loadbalancer" exposed -
Para obter informações sobre o nginx-service, execute o seguinte comando:
kubectl get service/nginx-service-loadbalancer | awk {'print $1" " $2 " " $4 " " $5'} | column -tExemplo de saída:
NAME TYPE EXTERNAL-IP PORT(S) nginx-service-loadbalancer LoadBalancer *****.eu-west-1.elb.amazonaws.com 80:30039/TCP -
Para verificar se você pode acessar externamente o balanceador de carga, execute o seguinte comando:
curl -silent *****.eu-west-1.elb.amazonaws.com:80 | grep title -
Para excluir o serviço LoadBalancer, execute o seguinte comando:
kubectl delete service nginx-service-loadbalancerExemplo de saída:
service "nginx-service-loadbalancer" deleted
Observação: por padrão, o tipo de Serviço LoadBalancer cria um Classic Load Balancer. Para oferecer suporte ideal e confiabilidade a longo prazo, é uma prática recomendada usar o AWS Load Balancer Controller para provisionar Network Load Balancers. Essa solução mantida pela AWS fornece recursos avançados, melhor integração com os serviços e suporte da AWS.
Para criar um Network Load Balancer com um destino do tipo de instância, adicione a anotação a seguir ao manifesto de serviço:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
-or-
Para criar um Network Load Balancer com destinos IP, implante o Controlador AWS Load Balancer e, em seguida, crie um balanceador de carga que usa destinos IP.
- Tópicos
- Containers
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
- feita há 9 meses
- feita há um ano
AWS OFICIALAtualizada há 3 anos