Como faço para expor meus serviços hospedados pelo Kubernetes na AWS para o mundo?

3

Eu tenho um cluster do Kubernetes na AWS que é instalado usando kops (topologia pública). Uma das minhas implantações é um servidor da web que gostaria de expor via CloudFront, e o outro é um servidor de API que gostaria de expor via ALB.

Em ambos os casos, isso significa que os certificados são atendidos por mim. Para o servidor de API em particular, é importante para mim ter endereços IP do cliente, portanto, preciso de balanceamento de carga HTTP, não apenas TCP. Eu também uso WebSockets, então eu preciso de ALB, não de ELB.

Criar um "serviço externo" me dá um balanceador de carga TCP do ELB. Para o servidor web, eu poderia simplesmente apontar o CloudFront para isso (o endereço IP elástico é estável?) Para TLS e caching. Para o servidor de API, eu poderia apontar ALB para ele, mas isso parece um pouco redundante.

De acordo com a documentação do k8s , eu deveria usar um controlador de entrada nginx por trás do ELB , mas eu tenho que fornecer certificados para nginx (é a solução integrada com Let's Encrypt em tudo?), e eu perderia o endereço IP do cliente. Infelizmente, os exemplos ainda estão por ser escritos.

Qual é atualmente a solução certa para o que eu quero fazer? Eu presumo que seja um caso bem comum.

    
por Dan Ellis 10.03.2017 / 23:52

1 resposta

2

Você não precisa de ELBs e ALBs.

Dedique alguns dos nós do cluster para serem nós do balanceador de carga. Coloque-os em um grupo de nós diferente, dê a eles algum rótulo: mynodelabel/ingress: nginx e, em seguida, hospede um daemonset de ingresso nginx nesse grupo de nós.

As opções mais importantes são:

spec:
  restartPolicy: Always
  dnsPolicy: ClusterFirst
  hostNetwork: true
  nodeSelector:
    mynodelabel/ingress: nginx

e

  ports:
    - containerPort: 80
      hostPort: 80
    - containerPort: 443
      hostPort: 443

Desta forma, você obtém tráfego de usuário bruto!

O controlador de entrada Nginx funciona perfeitamente com o kube-lego Vamos criptografar!

Atribua os elipsIPs aos nós do balanceador de carga do K8s e aponte apenas a entrada de DNS do route53 para eles.

Opcionalmente, você pode contaminar os nós do balanceador de carga para que os pods comuns não funcionem neles e diminuam o nginx.

    
por 29.10.2017 / 12:20