Início Pré Requisitos Máquinas Certificados Configuração Criptografia ETCD Controllers Workers Kubectl

Rotas

DNS Teste Dashboard Destruir

Provisionando as Rotas

Os pods programados para um nó recebem um endereço IP do intervalo CIDR de pods no worker(nó), por isso os pods não podem se comunicar com outros pods em execução em nós diferentes porque não existem rotas de rede. então criaremos uma rota para cada nó de trabalho que mapeia o intervalo de CIDR do pod do nó para o endereço IP interno do nó.
Lembramos que existem outras maneiras de implementar o modelo de rede Kubernetes.
Vamos reunir todas as informações necessárias para criar rotas na rede VPC kubernetes-the-hard-way e usa-las para criar entradas na tabela de rotas.
Essa funcionalidade poderá fornecida por plug-ins CNI como: flannel, calico, amazon-vpc-cni-k8s, mas iremos fazer isso manualmente para entender o que esses plug-ins fazem nos bastidores.
Iremos ver o endereço IP interno e o intervalo CIDR do pod para cada worker e criar entradas na tabela de rota:

A Tabela de Rotas

for instance in worker-0 worker-1 worker-2; do
  instance_id_ip="$(aws ec2 describe-instances \
    --filters "Name=tag:Name,Values=${instance}" \
    --output text --query 'Reservations[].Instances[].[InstanceId,PrivateIpAddress]')"
  instance_id="$(echo "${instance_id_ip}" | cut -f1)"
  instance_ip="$(echo "${instance_id_ip}" | cut -f2)"
  pod_cidr="$(aws ec2 describe-instance-attribute \
    --instance-id "${instance_id}" \
    --attribute userData \
    --output text --query 'UserData.Value' \
    | base64 --decode | tr "|" "\n" | grep "^pod-cidr" | cut -d'=' -f2)"
  echo "${instance_ip} ${pod_cidr}"

  aws ec2 create-route \
    --route-table-id "${ROUTE_TABLE_ID}" \
    --destination-cidr-block "${pod_cidr}" \
    --instance-id "${instance_id}"
done

Resultado Esperado

    10.0.1.20 10.200.0.0/24
    {
        "Return": true
    }
    10.0.1.21 10.200.1.0/24
    {
        "Return": true
    }
    10.0.1.22 10.200.2.0/24
    {
        "Return": true
    }

Validando as Rotas


Atenção: >Valide as rotas de rede para cada instância de trabalho com o comando abaixo,
Tome cuidado com o comando pois pode pode bugar sua janela ssh atual
Durante a execução do comando você deverá ir final teclando a seta pra baixo até aparecer a palavra END , então digite a letra q para retonar ao shell sem danificar sua sessão

aws ec2 describe-route-tables \
    --route-table-ids "${ROUTE_TABLE_ID}" \
    --query 'RouteTables[].Routes'


Resultado Esperado

[
    [
        {
            "DestinationCidrBlock": "10.200.0.0/24",
            "InstanceId": "i-0879fa49c49be1a3e",
            "InstanceOwnerId": "107995894928",
            "NetworkInterfaceId": "eni-0612e82f1247c6282",
            "Origin": "CreateRoute",
            "State": "active"
        },
        {
            "DestinationCidrBlock": "10.200.1.0/24",
            "InstanceId": "i-0db245a70483daa43",
            "InstanceOwnerId": "107995894928",
            "NetworkInterfaceId": "eni-0db39a19f4f3970f8",
            "Origin": "CreateRoute",
            "State": "active"
        },
        {
            "DestinationCidrBlock": "10.200.2.0/24",
            "InstanceId": "i-0b93625175de8ee43",
            "InstanceOwnerId": "107995894928",
            "NetworkInterfaceId": "eni-0cc95f34f747734d3",
            "Origin": "CreateRoute",
            "State": "active"
        },
        {
            "DestinationCidrBlock": "10.0.0.0/16",
            "GatewayId": "local",
            "Origin": "CreateRouteTable",
            "State": "active"
        },
        {
            "DestinationCidrBlock": "0.0.0.0/0",
            "GatewayId": "igw-00d618a99e45fa508",
            "Origin": "CreateRoute",
            "State": "active"
        }
    ]
]