Existem cinco peças distintas de automação de infraestrutura potencialmente em jogo:
- ip para atribuição de nó
- nome do dns para o mapeamento de ip
- balanceamento de carga para o mapeamento de membros
- mapeamento de membros ip do serviço do kubernetes para o balanceador de carga
- entrada do kubernetes
Alguns deles podem dirigir alguns dos outros. Eles não necessariamente jogam bem juntos e podem competir uns com os outros.
Eu realmente não observei o tempo de execução do kubernetes da Amazon, mas fora disso, para fazer a coisa simples que você quer fazer, estou ciente de pelo menos três opções:
- a partir dos kubernetes, crie um tipo de serviço = LoadBalancer para criar um ELB. Isso fornecerá um nome de domínio exclusivo para o qual você pode criar um registro CNAME no route53 para mapear seu subdomínio. A associação ao ELB será atualizada usando automação semelhante, já que mantém os serviços atualizados com os ips do pod. Existem algumas limitações em torno do balanceamento de solicitação da camada 4 e da camada 7.
- inicie em um ELB, adicione nós do EC8 do k8s como membros do ELB e execute a entrada como um daemonset. Há muitas variantes sobre isso, mas isso significa que a responsabilidade de garantir que a associação no ELB esteja correta está vinculada ao gerenciamento de k8s no EC2, seja automatizado ou manual. Mas isso oferece outros pontos de controle sobre o roteamento de tráfego da camada 7.
- a partir de kubernetes, use uma ferramenta chamada route53-mapper para orientar a configuração de route53 a partir de anotações nos recursos de serviço.
Esta é uma versão mais simples do primeiro, incluindo o TLS, mas parece um pouco insano usá-lo para o TLS porque parece exigir manter os certificados em anotações de serviço, em vez de onde eles pertencem, em segredos.
Respostas:
Existe uma razão maior para ter outra camada entre o gateway e o mundo externo além da compatibilidade?
Não há exigência, esta abordagem está resolvendo ter ELB e k8 possuindo automação. Geralmente, não se deseja proprietários de automação concorrentes.
O que eu tentei funcionar no Google Cloud Platform (isso é um problema específico da implantação da AWS)
A automação do gcloud é diferente e seus balanceadores de carga podem receber ips, porque ela tem alocação de IP gerenciada separadamente. Então, até certo ponto, esse é um problema específico da AWS.
Controlador de entrada Nginx ... Qual é a diferença entre um proxy reverso Nginx e o serviço Kubernetes Ingress? Porque para mim as palavras parecem ser usadas de forma intercambiável aqui.
Eles são intercambiáveis. Um é uma abstração, o outro é concreto.
Kubernetes O Ingress é a abstração que pode ser implementada de muitas maneiras diferentes. O ingresso inclui recursos de ingresso, um controlador e um proxy que assume a configuração. O controlador observa o cluster em busca de alterações nos recursos de entrada, converte-as em configurações específicas de proxy e, em seguida, recarrega o proxy.
O controlador de entrada nginx é uma implementação deste maquinário usando nginx. Há muitos outros usando haproxy e outros proxies.
Parece haver muitas maneiras de fazer isso, qual é o melhor método atual (e mais fácil)?
Veja acima. Existem provavelmente outras formas também.