Laten we snel bekijken waar ConfigMaps en Secrets over gaan:
- ConfigMaps: Zie deze als de persoonlijke assistent van je app, die alle niet-gevoelige configuratiegegevens bijhoudt.
- Secrets: De kluis waar je alle vertrouwelijke informatie bewaart. Wachtwoorden, API-sleutels, noem maar op.
Nu denk je misschien: "Zijn Secrets niet, nou ja... geheim?" Wacht even, daar komen we zo op terug!
ConfigMaps en Secrets maken: Hoe doe je dat?
Laten we de mouwen opstropen en aan de slag gaan met wat YAML.
ConfigMaps: Je Configuratiepartner
Een ConfigMap maken is een fluitje van een cent. Hier is een YAML-fragment om je op weg te helpen:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-awesome-config
data:
APP_COLOR: blue
APP_MODE: production
Of, als je meer van de commandoregel houdt:
kubectl create configmap my-awesome-config --from-literal=APP_COLOR=blue --from-literal=APP_MODE=production
Secrets: Niet je doorsnee geheim
Nu, voor de ster van de show - Secrets! Hier is hoe je er een kunt maken:
apiVersion: v1
kind: Secret
metadata:
name: my-super-secret
type: Opaque
data:
DB_PASSWORD: cGFzc3dvcmQxMjM= # base64 gecodeerd "password123"
Of via de commandoregel:
kubectl create secret generic my-super-secret --from-literal=DB_PASSWORD=password123
Maar wacht, er is een addertje onder het gras! Heb je gemerkt dat de gegevens van de Secret gewoon base64 gecodeerd zijn? Daarover straks meer.
De Valkuilen: Val niet in deze vallen!
Nu we de basis hebben behandeld, laten we het hebben over enkele veelvoorkomende fouten die zelfs ervaren ontwikkelaars maken. Geloof me, ik ben er geweest, heb het gedaan en heb het "Ik heb de productie gebroken" t-shirt.
1. Het "Geheim" Dat Niet Zo Geheim Is
Weet je nog dat ik zei dat Secrets gewoon base64 gecodeerd zijn? Nou, dat is onze eerste valkuil. Veel ontwikkelaars denken dat Secrets versleuteld zijn. Spoiler alert: dat zijn ze niet!
"Maar wacht," zou je kunnen zeggen, "is base64-codering niet genoeg?" Nou, als je denkt dat dat veilig is, heb ik een brug te koop voor je!
Om je Secrets echt te beveiligen, moet je versleuteling in rust inschakelen. Hier is een snel voorbeeld van hoe je dat doet:
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: c2VjcmV0LWtleS1oZXJl
- identity: {}
2. De Omgevingsvariabele Val
Gebruik je omgevingsvariabelen om secrets op te slaan? Dat is alsof je je huissleutel onder de deurmat legt. Iedereen die toegang krijgt tot je pod kan alle omgevingsvariabelen zien met een eenvoudig commando:
kubectl exec -it my-pod -- env
Overweeg in plaats daarvan om secrets als bestanden te mounten. Het is niet waterdicht, maar het is een stap vooruit:
volumeMounts:
- name: secret-volume
mountPath: /etc/secrets
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-super-secret
3. Het 'kubectl describe' Dilemma
Wist je dat kubectl describe secret
de geheime gegevens in base64 laat zien? Ja, het is zo eenvoudig om je secrets bloot te leggen. Om dit te beperken, gebruik RBAC om te bepalen wie secrets kan beschrijven:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Best Practices: Houd je Kubernetes Cluster Fort Knox-Beveiligd
Nu we hebben besproken wat je niet moet doen, laten we het hebben over enkele best practices om je ConfigMaps en Secrets veiliger te houden dan de notenvoorraad van een eekhoorn in de winter.
1. Behandel Secrets Alsof Ze Echt... Geheim Zijn
Nooit, en ik bedoel NOOIT, hardcode secrets in je applicatiecode. Zelfs niet voor die "snelle test" in productie. We zijn er allemaal geweest, maar weersta de verleiding!
2. Gebruik een Secret Manager
Overweeg om Kubernetes te integreren met een speciale secret manager zoals HashiCorp Vault of AWS Secrets Manager. Deze tools zijn ontworpen om secrets veilig te beheren en kunnen naadloos integreren met Kubernetes.
3. Roteer Secrets Regelmatig
Behandel je secrets zoals je je ondergoed behandelt - verander ze regelmatig! Stel een proces in om secrets automatisch te roteren. Je toekomstige zelf zal je dankbaar zijn.
4. Monitor op Lekken
Stel monitoring in om te detecteren of secrets per ongeluk worden blootgesteld. Tools zoals GitGuardian kunnen je helpen secrets te onderscheppen voordat ze in productie komen.
Wanneer ConfigMaps vs Secrets te Gebruiken
Nu we de hoe en de wat hebben behandeld, laten we het hebben over de wanneer.
Gebruik ConfigMaps voor:
- Niet-gevoelige configuratiegegevens
- Omgevingsspecifieke instellingen
- Configuratiebestanden
Gebruik Secrets voor:
- Wachtwoorden
- OAuth tokens
- SSH-sleutels
- Alle gegevens die je nieuwsgierige collega niet mag zien
Afronding
ConfigMaps en Secrets zijn krachtige tools in het Kubernetes-ecosysteem, maar met grote kracht komt grote verantwoordelijkheid. Gebruik ze verstandig, beveilig ze goed, en je applicaties zullen je bedanken door veilig en configureerbaar te blijven.
Onthoud, in de wereld van Kubernetes gaat een beetje paranoia een lange weg. Ga er altijd van uit dat iemand probeert toegang te krijgen tot je secrets, want in de wilde wereld van het internet doen ze dat waarschijnlijk ook!
Ga nu op pad en configureer veilig, mijn mede Kubernetes-avonturiers!
"Het enige echt veilige systeem is er een dat is uitgeschakeld, gegoten in een blok beton en verzegeld in een met lood beklede kamer met gewapende bewakers." - Gene Spafford
P.S. Als je dit artikel nuttig vond, overweeg dan om het te delen met je team. Wie weet, misschien red je iemand van een nachtelijk "Oeps, ik heb ons productiedatabasewachtwoord blootgelegd" incident!