Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes: The Ingress Challenge

Kubernetes: The Ingress Challenge

Kubernetes: The Ingress Challenge

Marcelo Andrade

December 14, 2019
Tweet

More Decks by Marcelo Andrade

Other Decks in Technology

Transcript

  1. O que é Kubernetes? Praticamente um DevopsDay inteiro falando disso!

    “Plataforma open-source para orquestração de containers”
  2. Por que Kubernetes importa? Redefine o conceito de infraestrutura e

    IaaS Containers: solução definitiva para orquestração Redução do “lock-in” com soluções de IaaS/PaaS
  3. Downside: kubernetes realmente é complicado • Objetos: 56, mas potencialmente

    “over 9000” com CRDS # kubectl api-resources --no-headers | wc -l 56 • Controllers: 36 attachdetach, bootstrapsigner, cloud-node-lifecycle, clusterrole-aggregation, cronjob, csrapproving, csrcleaner, csrsigning, daemonset, deployment, disruption, endpoint, endpointslice, garbagecollector, horizontalpodautoscaling, job, namespace, nodeipam, nodelifecycle, persistentvolume-binder, persistentvolume-expander, podgc, pv-protection, pvc-protection, replicaset, replicationcontroller, resourcequota, root-ca-cert-publisher, route, service, serviceaccount, serviceaccount-token, statefulset, tokencleaner, ttl, ttl-after-finished https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/
  4. 365 plugins CNI - 1 para cada dia do ano

    https://tigera.io/video/tigera-calico-fundamentals
  5. Kubernetes, what is best in life? https://www.imdb.com/title/tt0082198/ Crush your sysadmins,

    see them driven before surreal complexity and hear the lamentation of their bosses!
  6. Kubernetes: comunicação entre componentes Service ClusterIP: • “loadbalancers” internos •

    nomes DNS internos • exclusivamente interno https://www.docker.com/blog/designing-your-first-application-kubernetes-communication-services-part3/
  7. Acesso externo via services? Service ClusterIP: • Acesso “externo” via

    truques sujos: ◦ kubectl proxy --port=8080 ◦ http://localhost:8080/api/v1/proxy/namespaces/<NAMESPACE>/services/<SERV ICE-NAME>:<PORT-NAME>/ https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0
  8. service NodePort • Associa porta do nó a um service

    • Porta aberta em TODOS os nós • Feio. https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0
  9. service LoadBalancer • service com IP “público” • quase que

    exclusivo de cloud providers • on-prem chupando dedo (metallb/calico svc exporter) https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0
  10. Ingress e Ingress Controller • acesso centralizado • recursos avançados

    • economiza LBs/IPs https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0
  11. Wrong: “Relatively simple” “What’s the rights and wrongs with Ingress?”

    Right: “Relatively simple” https://kubernetespodcast.com/episode/041-ingress/
  12. Ingress - definição “Ingress exposes HTTP and HTTPS routes from

    outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.” “You must have an ingress controller to satisfy an Ingress. Only creating an Ingress resource has no effect.” https://kubernetes.io/docs/concepts/services-networking/ingress/
  13. spec: rules: - host: first.devsres.com http: paths: - backend: serviceName:

    service1 servicePort: 80 - host: second.devsres.com http: paths: - backend: serviceName: service2 servicePort: 80
  14. Ingress: o patinho feio dos objetos K8S Existe deste 1.1;

    Beta até hoje (1.17); Objeto Namespaced que “vaza” (hostname);
  15. Ingress: o patinho feio dos objetos K8S Maioria dos objetos:

    cloud = on-premise Acesso externo on-premise ainda é um desafio
  16. Ingress: soluções apresentadas - Desistir completamente - Reescrever completamente (vai

    demorar) https://docs.google.com/document/d/1qcWLMMk8YLuXgCxgn3A3wtz2qLWJ_iHndL73DCOOfvM/edit#heading=h.hv0a3lvpryy9
  17. Ingress controller no GKE Ingress Object => HTTP(S) Load Balancer

    via GKE Ingress • namespace + ingress <= 40 caracteres • 50 url maps • Cluster com no máximo 1000 nodes https://cloud.google.com/kubernetes-engine/docs/concepts/ingress
  18. Ingress controller na AWS Ingress Object => ELB/ALB via ALB

    Ingress Controller • processo bem mais burocrático • +- 30 parâmetros de configuração https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/
  19. Ingress - configurações com annotations “Relatively simple” => cada um

    faz do seu jeito Não existem dois Ingresses Controllers exatamente iguais Escolher Ingress Controller é um desafio por si só
  20. Nginx Ingress Controller “Oficial” Kubernetes Ingress para cloud-orphans 145 opções

    em configmap, 100+ annotations, @aledbf stepping down as maintainer #4404 https://github.com/kubernetes/ingress-nginx/issues/4404
  21. Precisamos de outras opções! VMware Contour Traefik Gloo Kong Skipper

    e outros https://medium.com/flant-com/comparing-ingress-controllers-for-kubernetes-9b397483b46b
  22. Nosso “case” 1 cluster. 370 sistemas, 1355 namespaces 3682 objetos

    ingresses 7702 ingresses annotations customizando parâmetros 15058 networkpolicies 26004 linhas de ipvsadm -Ln (kube-proxy)
  23. HAProxy Ingress Controller by @jcmoraisjr Único Controller que sobreviveu ao

    caos Dono in-house SERPRO Feature-rich e performático https://github.com/jcmoraisjr/haproxy-ingress
  24. Haproxy IC @jcmoraisjr: estatísticas 55.000 linhas de configuração (haproxy.conf) 2.700

    backends 3.350 servers ativos 3600 objetos ingress 1500 domínios 451 domínios com certificado customizado
  25. Haproxy IC @jcmoraisjr: estatísticas Tempos de operações 2500ms para compilar

    configuração (controller) 800ms para gravar configuração (controller) 4000ms para reiniciar haproxy quando necessário (update dinâmico é imediato)