Sobes.tech
Middle

Hoe communiceren de draaiende applicaties in Kubernetes met elkaar?

sobes.tech AI

Antwoord van AI

De interactie tussen applicaties in Kubernetes vindt voornamelijk plaats via netwerkservices.

  1. Service Discovery: Applicaties communiceren niet rechtstreeks met pods via hun IP-adressen, omdat deze vluchtig zijn en kunnen veranderen bij hercreatie. In plaats daarvan gebruiken ze Service Discovery, dat een stabiele DNS-naam en IP biedt voor een groep pods die dezelfde functie uitvoeren.

    • ClusterIP: Standaard servicetype dat een intern IP-adres biedt dat alleen binnen de cluster toegankelijk is.
    • NodePort: Opent een statische poort op elke node van de cluster, die het verkeer doorstuurt naar de ClusterIP-service.
    • LoadBalancer: Creëert een externe load balancer (indien ondersteund door de cloudprovider).
    • ExternalName: Laat de service verwijzen naar een externe DNS-naam.
  2. DNS: Kubernetes biedt een interne DNS-server (bijvoorbeeld CoreDNS), die automatisch DNS-namen voor services aanmaakt. Applicaties kunnen naar een andere service verwijzen via de naam service-name.namespace.svc.cluster.local of de verkorte vorm service-name.

  3. Netwerkbeleid: Bepaalt hoe groepen pods met elkaar en met externe netwerkpunten kunnen communiceren. Ze worden gebruikt om netwerkverkeer te isoleren om veiligheidsredenen.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: deny-all-ingress
      namespace: default
    spec:
      podSelector: {} # Toepassen op alle pods in namespace default
      policyTypes:
      - Ingress
      ingress: [] # Verhindert al inkomend verkeer
    
  4. Ingress: Beheert de externe toegang tot services in het cluster, meestal via HTTP/HTTPS. De Ingress-controller (bijvoorbeeld Nginx Ingress, Traefik) routeert verkeer van het externe netwerk naar de juiste interne services op basis van regels die in de Ingress-resource zijn gedefinieerd.

  5. Service Mesh: (Bijvoorbeeld Istio, Linkerd) Voegt een extra abstractielaag en functionaliteit toe voor de interactie tussen services. Biedt mogelijkheden zoals mutual TLS, request-tracing, metrics, verkeerbeheer (A/B-testen, canary releases) op proxy-niveau (sidecar-containers) die aan elke pod worden toegevoegd.

De belangrijkste mechanismen voor interactie zijn dus Service Discovery via DNS en verschillende typen services, aangevuld met Network Policies voor beveiliging en Ingress/Service Mesh voor geavanceerder verkeerbeheer en observatie.