Kort svar
Den nemmeste vej til mTLS i Kubernetes er et service mesh (Istio eller Linkerd), der automatisk injicerer en sidecar-proxy ved siden af hver pod og krypterer + autentificerer al pod-til-pod-trafik uden at du ændrer din applikationskode. Vil du have mTLS uden et mesh, udsteder du certifikater med cert-manager og monterer dem i dine pods. Begge bygger på en identitetsmodel — ofte SPIFFE — der giver hver workload en kryptografisk verificerbar identitet.
Mulighed 1: Service mesh (automatisk mTLS)
Et service mesh placerer en sidecar-proxy (Envoy i Istio, en letvægts-proxy i Linkerd) i hver pod. Al udgående og indgående trafik går gennem proxyen, som etablerer mTLS med modpartens proxy. Applikationen ser kun almindelig HTTP på localhost — proxyen håndterer certifikater, rotation og verifikation.
I Istio aktiverer du obligatorisk mTLS for et namespace med en PeerAuthentication-politik:
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: payments
spec:
mtls:
mode: STRICT # afvis al ikke-mTLS-trafik i namespacet
STRICT betyder at en pod uden sidecar — eller en angriber på netværket — ikke kan tale med servicerne. PERMISSIVE tillader både mTLS og klartekst under en migrering.
Det stærke ved et mesh er, at certifikaterne er kortlivede (ofte 24 timer) og roteres automatisk. Bagsiden er, at de er usynlige for dine sædvanlige overvågningsværktøjer — de ligger i proxyens hukommelse, ikke i en fil du kan inspicere.
Mulighed 2: cert-manager (eksplicitte certifikater)
Vil du have mTLS uden et fuldt mesh — fx kun mellem to bestemte services — udsteder cert-manager certifikater fra en Issuer og lægger dem i et Kubernetes-secret, som din pod monterer:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: service-a-client
namespace: payments
spec:
secretName: service-a-client-tls
duration: 2160h # 90 dage
renewBefore: 360h # forny 15 dage foer udloeb
commonName: service-a.payments.svc
usages:
- client auth # clientAuth EKU til mTLS-klientrollen
- digital signature
issuerRef:
name: internal-ca
kind: ClusterIssuer
Bemærk usages: client auth — det sætter den clientAuth EKU, mTLS kræver. cert-manager fornyer automatisk inden udløb, men hvis en Issuer fejler, eller et secret ikke genmonteres, kan et certifikat stadig nå at udløbe.
Mulighed 3: SPIFFE/SPIRE (identitet, ikke kun nøgler)
SPIFFE (Secure Production Identity Framework For Everyone) definerer en standardidentitet for workloads: en SPIFFE ID som spiffe://example.org/ns/payments/sa/service-a, indlejret i certifikatets SAN som en URI. SPIRE er implementeringen, der udsteder disse kortlivede SVID-certifikater til hver workload baseret på dens attesterede identitet (fx hvilken Kubernetes service account den kører som).
Pointen er, at identiteten ikke er en IP eller et podnavn, der ændrer sig — den er kryptografisk bundet til workloaden. Istio bruger SPIFFE-ID'er internt, så de to modeller hænger ofte sammen.
Verificér at mTLS faktisk er aktivt
At have konfigureret mTLS er ikke det samme som at det virker. Tjek fra inde i en pod, hvilket certifikat sidecar'en præsenterer:
# Inspicer det cert Istios sidecar bruger istioctl proxy-config secret deploy/service-a -n payments # Eller test direkte mod en service via dens sidecar-port kubectl exec -it deploy/service-b -n payments -c istio-proxy -- \ openssl s_client -connect service-a:8080 -showcerts
Ser du et SPIFFE-URI i SAN og en kort gyldighedsperiode, kører mTLS som forventet.
Den blinde vinkel: certifikater uden for meshet
Et mesh håndterer mTLS pænt inde i clusteret. Men de fleste organisationer har også ingress-certifikater, certifikater på databaser uden for clusteret, interne CA'er med lange levetider og legacy-services, der ikke er i meshet. De falder uden for meshets automatik — og det er præcis dér udløb rammer uventet. CertControl opdager og overvåger certifikater på tværs af hele jeres miljø, ikke kun inde i ét cluster, sporer udløb og validerer kæder, og advarer før et certifikat — i eller uden for Kubernetes — får en service til at fejle. Start med vores mTLS-guide.
Ofte stillede spørgsmål
Skal jeg bruge et service mesh for at få mTLS i Kubernetes?
Nej, men det er den nemmeste vej hvis du vil have mTLS overalt automatisk. Til mTLS mellem få bestemte services kan cert-manager + monterede certifikater være enklere og lettere at gennemskue.
Hvad er forskellen på Istio og Linkerd til mTLS?
Begge giver automatisk mTLS via sidecars. Istio er mere funktionsrigt (Envoy-baseret, mange politikker), Linkerd er lettere og enklere. Til ren mTLS uden avancerede trafikregler er Linkerd ofte tilstrækkeligt.
Hvad er en SPIFFE ID?
En standardiseret workload-identitet på formen spiffe://trust-domain/path, indlejret i certifikatets SAN som en URI. Den binder identiteten til workloaden frem for til en IP eller et podnavn der skifter.
Roterer service mesh-certifikater automatisk?
Ja. Både Istio og Linkerd udsteder kortlivede certifikater (typisk 24 timer) og roterer dem løbende uden manuel indgriben. Det er en stor del af deres værdi.
Hvorfor kan mine sædvanlige scannere ikke se mesh-certifikaterne?
Fordi de lever i proxyens hukommelse og kun præsenteres på interne pod-til-pod-forbindelser, ikke på en offentlig port. Til overblik over dem bruger du mesh-værktøjer som istioctl — men ingress- og eksterne certifikater bør stadig overvåges udefra.