Como escolher o endereço IP externo de um balanceador de carga do Kubernetes no Google Kubernetes Engine

15

Estou implantando um aplicativo da web usando o Google Kubernetes Engine e quero torná-lo acessível por meio de um balanceador de carga em um endereço IP estático existente que controle como parte do mesmo projeto no Google Cloud Platform, porque o nome do domínio quer usar já aponta para esse IP.

O arquivo yaml que usei para o pod é:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

Eu posso configurar um balanceador de carga usando:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

Isso fornece um IP externo no qual o aplicativo é acessível, mas não consigo encontrar uma maneira de configurá-lo para usar o IP desejado. A documentação dos serviços menciona uma configuração spec.clusterIP, mas isso não parece estar relacionado para o IP externo. Da mesma forma, depois que o balanceador de carga é configurado, o campo status.loadBalancer.ingress.ip do serviço é definido como seu endereço IP externo, mas isso não parece ser uma configuração configurável.

Como alternativa, tentei criar manualmente uma regra de encaminhamento no console do Google Compute Engine para direcionar o tráfego do meu endereço IP estático para o pool de destino configurado pelo Kubernetes, mas, quando tento conectar, a conexão é recusada.

Existe alguma maneira de fazer o que eu quero - expor um pod do Kubernetes (ou controlador de replicação) no mecanismo do Google Kubernetes em um endereço IP estático escolhido?

    
por Ben 14.07.2015 / 13:48

2 respostas

8

TL; DR O Google Container Engine executando o Kubernetes v1.1 suporta loadBalancerIP apenas marcar o IP atribuído automaticamente como estático primeiro.

O Kubernetes v1.1 suporta externalIPs :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

Até o momento, não há documentação consistente realmente boa sobre como usá-lo no GCE. O que é certo é que este IP deve primeiro ser um dos seus IPs static pré-alocados.

A documentação sobre balanceamento de carga entre regiões é principalmente para o Compute Engine e não Kubernetes / Container Engine, mas ainda é útil especialmente a parte "Configure o serviço de balanceamento de carga".

Se você acabou de criar um Kubernetes LoadBalancer no GCE, ele criará um Compute Engine de rede > Rede > Balanceamento de carga de rede > Regra de Encaminhamento apontando para um pool de destino feito de suas máquinas em seu cluster (normalmente apenas aqueles executando os Pods que correspondem ao seletor de serviço). Parece que excluir um namespace não limpa bem as regras criadas.

Atualizar

Na verdade, é agora suportado (mesmo que documentado):

  1. Verifique se você está executando o Kubernetes 1.1 ou posterior (no GKE edite seu cluster e verifique "Versão do nó")
  2. Abaixo de Rede > Endereços IP externos você já deve ter alguns Ephemeral marcados como apontando para a instância da VM do seu cluster (se não tiver certeza, implante uma vez sem loadBalancerIP , aguarde até receber um IP externo quando você executar kubectl get svc e procurar esse IP na lista nessa página). Marque um deles como estático , digamos que Endereço externo seja 10.10.10.10 .
  3. Edite seu LoadBalancer para ter loadBalancerIP=10.10.10.10 como acima (adapte-se ao IP que foi dado a você pelo Google).

Agora, se você excluir seu LoadBalancer ou até mesmo seu namespace, ele deverá preservar esse endereço IP ao reimplementar esse cluster. Se você precisar alterar o cluster, alguns ajustes manuais devem ser possíveis:

  1. Na seção "Balanceamento de carga de rede", na guia "Segmentar pools" , clique no botão "Criar pool de destino":
    • Nome: cluster-pool (ou qualquer outro nome)
    • Região: selecione a região de um dos seus clusters
    • Exame de saúde: opcional, se você desejar
    • Selecionar grupos de instâncias existentes: seu cluster do Kubernetes
  2. Na seção "Balanceamento de carga de rede", na guia "Regras de encaminhamento" , clique no botão "Criar regra de encaminhamento":
    • Nome: http-cross-region-gfr (ou qualquer outro nome)
    • Região: selecione a região de um dos seus clusters
    • IP externo: selecione loadbalancer-ip-crossregion que você acabou de reservar
    • Pool de segmentação: selecione cluster-pool que você acabou de criar
por 20.11.2015 / 12:08
8

Boas notícias. Isso será corrigido no Kubernetes v1.1. Você pode definir o campo service.spec.loadBalancerIP para um IP que você sabe que é seu.

Anterior:

Este é um recurso que caiu nas rachaduras. Era para funcionar (e pode até ter funcionado em algum momento), mas não foi bem testado e foi quebrado ao longo do caminho e, em seguida, meio que acidentalmente projetado (temporariamente).

Está na minha lista de coisas a corrigir após o 1.0.

link

    
por 14.07.2015 / 18:47