Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
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, 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 obter 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 que é chamado de 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 -t
Exemplo de saída:
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Aplique o tipo de serviço
Decida como você deseja expor sua aplicação e, em seguida, aplique o tipo de serviço apropriado. Para obter informações sobre cada tipo de serviço, consulte o tipo: ClusterIP, digite: NodePort e digite: LoadBalancer no site do Kubernetes.
Tipo de serviço ClusterIP
Conclua as etapas a seguir:
-
Crie um arquivo chamado clusterip.yaml.
-
Defina o 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.yaml
Exemplo de saída:
service/nginx-service-cluster-ip created>/code>
-or-
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-ip
Observação: o comando expose cria um serviço, mas não cria um arquivo YAML. No entanto, o kubectl traduz seu comando imperativo em um objeto declarativo de implantação 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-ip
Exemplo 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 title
Observação: para acessar o Serviço, você deve estar conectado a 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-ip
Exemplo 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
-or-
Para expor uma implantação do tipo NodePort, execute o comando imperativo a seguir:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeport
Exemplo 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-nodeport
Exemplo de saída:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27s
Importante: 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 dos nós 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 -t
Exemplo 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
-or-
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 -t
Exemplo 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-nodeport
Exemplo 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.yaml
Exemplo de saída:
service/nginx-service-loadbalancer created
-or-
Para expor uma implantação do tipo LoadBalancer, execute o seguinte comando:
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancer
Exemplo 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 -t
Exemplo 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-loadbalancer
Exemplo 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 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.
Vídeos relacionados


Conteúdo relevante
- feita há 2 horaslg...
- feita há um mêslg...
- Resposta aceitafeita há um mêslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há 7 meses
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 anos
- Como resolvo os tempos de conexão esgotado quando me conecto ao meu serviço hospedado no Amazon EKS?AWS OFICIALAtualizada há um ano