Kubernetes Ingress através dos olhos de um iniciante

O que é ingresso?


Ingress é o tipo básico de recurso em Coubertene. Se você simplesmente declarar um objeto do tipo Ingress no kubernetis, nada acontecerá.


Para que este recurso comece a trabalhar no cluster Kubernetis, o Controlador do Ingress deve estar instalado, o que configurará o proxy reverso de acordo com o objeto do Ingress.


O Ingress Controller consiste em 2 componentes - um proxy reverso e um controlador que se comunica com o servidor da API Kubernetes. O proxy reverso escuta o tráfego recebido nas portas especificadas nas configurações (geralmente apenas a porta 80 é especificada nas configurações padrão). O controlador pode ser um daemon separado (como no nginx) ou incorporado no proxy (como no traefik).


Nem todos os provedores de kubernetes na nuvem pré-instalam o Ingress Controller por padrão.


Os controladores podem executar como DaemonSet ou como Implantação. É ideal usar o DaemonSet como o único controlador de ingresso, para que o proxy reverso escute todos os endereços IP dos trabalhadores. A implantação é perfeita se houver um balanceador na frente do controlador Ingress - do provedor kubernetis (GKE, AKS), MetalLB se for um haproxy / nginx premium ou regular instalado no servidor (é necessária configuração manual). Com esta instalação, é possível instalar vários Ingress Controller.


Como o tráfego de entrada chega ao Controlador de ingresso


Em todos os casos, o proxy reverso no Controlador de ingresso escuta as portas nas quais aguarda conexões http / https.


O tráfego nessas portas pode ser acessado de três maneiras:


  • NodePort (em portas aleatórias no intervalo de 30000-32767)
  • HostPort (pode ser pendurado nas portas 80, 443)
  • Rede do host - o Pod definirá suas portas na interface de rede pública (ou seja, todas as portas do contêiner serão abertas)

NodePort


Colocar o Ingress Controller em um NodePort sem um LoadBalancer faz pouco sentido, pois o URL incluirá a porta especificada no NodePort http://domain.example.org:32200/ .


Para esta opção, é melhor usar Implantações. Isso facilitará o dimensionamento do número de pods responsáveis ​​pelo tráfego de entrada, o registro do nodeAffinity por eles e o lançamento de vários controladores de entrada (por exemplo, para produção e preparação).


Hostport


Ao usar o HostPort, a porta é encaminhada a partir do host em que está sendo executado no mesmo Pod. Um LoadBalancer não é necessário para a entrada, mas para o site funcionar no DNS, é necessário indicar que o endereço do domínio está em todos os nós.


Exemplo de configuração de DNS para 3 trabalhadores:


ingress.example.org A 10.0.0.1 ingress.example.org A 10.0.0.2 ingress.example.org A 10.0.0.3 www.example.org CNAME ingress.example.org 

Para esta instalação, é melhor usar o DaemonSet, pois permite que você execute não mais que um Pod em um host. A implantação é possível, mas faz pouco sentido, pois A afinidade deve ser registrada para que 2 Pods não sejam atribuídos a um host, caso contrário, haverá um conflito nas portas.


Exemplo de configuração para traefik
 kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: traefik-ingress-controller namespace: traefik labels: k8s-app: traefik-ingress-lb spec: template: metadata: labels: k8s-app: traefik-ingress-lb name: traefik-ingress-lb namespace: traefik spec: serviceAccountName: traefik-ingress-controller terminationGracePeriodSeconds: 60 containers: - image: traefik:1.7.6 name: traefik-ingress-lb ports: - name: http containerPort: 80 hostPort: 80 - name: https containerPort: 443 hostPort: 443 - name: admin containerPort: 8080 hostPort: 8080 securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE args: - --api - --kubernetes - --logLevel=DEBUG - --entrypoints=Name:https Address::443 TLS - --entrypoints=Name:http Address::80 - --defaultentrypoints=http 

Rede host


Ao executar o Ingress Controller em uma rede compartilhada com o host, nenhum encaminhamento de porta é necessário, mas nesse caso, todas as portas abertas no Pod estarão acessíveis na Internet. Melhor usar o DaemonSet para executar. Os motivos são os mesmos do HostPort - para evitar conflitos de porta.


O que escolher


Se houver um LoadBalancer na entrada - NodePort, se não - HostPort + DNS Round Robin. Para experimentos, você pode tentar a rede Host, mas não é seguro.

Source: https://habr.com/ru/post/pt434524/


All Articles