Sobes.tech
Middle

Como garantir o acesso dos utilizadores a uma aplicação a funcionar no Kubernetes?

sobes.tech IA

Resposta da IA

Existem várias formas principais:

  1. Tipo de Serviço Kubernetes: LoadBalancer. O provedor de nuvem cria um balanceador de carga externo que direciona o tráfego para os pods da sua aplicação.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Aqui especifica-se o tipo LoadBalancer
    
  2. Tipo de Serviço Kubernetes: NodePort. Cada nó do cluster abre uma porta estática que redireciona o tráfego para o serviço. O acesso à aplicação é feito através do endereço IP de qualquer nó do cluster e essa porta estática.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: NodePort # Aqui especifica-se o tipo NodePort
    

    Este método é menos escalável e muitas vezes não recomendado para produção.

  3. Ingress. Objeto do Kubernetes que gere o acesso externo aos serviços no cluster. Requer um controlador de Ingress (por exemplo, Nginx Ingress, Traefik, HAProxy). O Ingress permite configurar o roteamento com base em nomes de domínio e caminhos.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
    spec:
      rules:
        - host: myapp.mydomain.com # Nome de domínio
          http:
            paths:
              - path: / # Caminho
                pathType: Prefix
                backend:
                  service:
                    name: my-app-service # Nome do serviço
                    port:
                      number: 80 # Porta do serviço
    
  4. Gateway API (abordagem mais moderna). Evolução do Ingress, fornece uma API mais expressiva e extensível para gerenciar o acesso. Inclui recursos GatewayClass, Gateway, HTTPRoute (e outros tipos de rotas).

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: my-app-route
    spec:
      parentRefs:
        - name: my-gateway # Referência ao recurso Gateway
      hostnames:
        - "myapp.mydomain.com"
      rules:
        - matches:
            - path:
                type: Prefix
                value: /
          backendRefs:
            - name: my-app-service # Nome do serviço
              port: 80 # Porta do serviço
    

A escolha do método depende dos requisitos de:

  • Escalabilidade
  • Complexidade do roteamento
  • Segurança (terminação SSL/TLS)
  • Plataforma de nuvem utilizada
  • Necessidade de gestão centralizada de acesso

Para a maioria dos cenários de produção, são utilizados LoadBalancer para fornecer um ponto de entrada (frequentemente para o controlador de Ingress) ou diretamente, e Ingress (ou Gateway API) para um roteamento flexível e gestão de acesso a diferentes serviços no cluster.