Como faço para expor os Serviços do Kubernetes que estão em execução no meu cluster do Amazon EKS?

7 minuto de leitura
0

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:

  1. 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
  2. Para criar a implantação, execute o seguinte comando:

    kubectl apply -f nginx-deployment.yaml
  3. 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:

  1. Crie um arquivo chamado clusterip.yaml.

  2. 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
  3. 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
  4. 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
  5. 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.

  6. 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:

  1. Crie um arquivo chamado nodeport.yaml.

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

  5. 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
  6. Para usar o Node IP e o NodePort para acessar a aplicação, execute o seguinte comando:

    curl -silent <Public/PrivateNodeIP>:30994 | grep title
  7. 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:

  1. Crie um arquivo chamado loadbalancer.yaml.

  2. 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
  3. 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
  4. 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
  5. 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
  6. 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.

AWS OFICIAL
AWS OFICIALAtualizada há 3 meses