Informatie over Kubernetes-geheimen

Voltooid

Een van de grootste overwegingen bij het werken met gedistribueerde toepassingen is het beheren van gevoelige informatie, zoals wachtwoorden, verbindingen en vergelijkbare gegevens. Met Kubernetes kunt u deze gegevens beveiligen met een resource die een geheim wordt genoemd.

Geheimen begrijpen

In Kubernetes kunt u met Geheimen gevoelige informatie op een veiligere manier opslaan dan tekst zonder opmaak in pods en implementaties. Geheimen zijn ontworpen voor het opslaan van wachtwoorden en andere gevoelige gegevens.

Kubernetes Secrets coderen hun gegevens in een base64-indeling. Hoewel Base64 geen versleutelingsalgoritmen is, kan Kubernetes zien dat de informatie is gecodeerd en deze informatie kan verbergen in uitvoer van opdrachten, zoals kubectl describe. Dit proces gebeurt niet met de configuratie van tekst zonder opmaak. Geheimen zijn altijd gericht op één naamruimte om blootstelling van gevoelige gegevens aan andere workloads in het cluster te voorkomen.

Typen geheimen

Er zijn verschillende soorten geheimen. Het meest voorkomende en standaardtype is Opaque, dat door de gebruiker gedefinieerde, willekeurige gegevens bevat. De andere veelvoorkomende typen zijn:

  • kubernetes.io/service-account-token: Definieert een serviceaccounttoken en wordt automatisch gemaakt wanneer een nieuw serviceaccount wordt gemaakt.
  • kubernetes.io/basic-auth: Referenties voor basisverificatie.
  • kubernetes.io/tls: TLS-client- of servergegevens, die worden gebruikt om HTTPS-verbindingen vanuit een toegangsbeheerobjectresource te verwerken, bijvoorbeeld.

Tip

Zie de officiële Kubernetes Secrets-documentatie voor meer informatie.

Een geheim maken en gebruiken

Volgens de officiële Kubernetes Secrets-documentatie kunt u een geheim op drie verschillende manieren gebruiken:

  • Gekoppeld als bestanden in een volume op containers binnen een pod of implementatie.
  • Als iets waarnaar wordt verwezen als een omgevingsvariabele in de pod- of implementatiespecificatie.
  • Gebruikt door de Kubelet bij het ophalen van installatiekopieën uit privéregisters via de imagePullSecret-sleutel in de podspecificatie.

U kunt geheimen zoals elke andere Kubernetes-resource maken met behulp van een YAML-manifestbestand of een kubectl opdracht. De specificatie van een geheim is als volgt:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
data:
  key_name: "key value in base64 format"

Voor een geheim met deze specificatie moet u de waarden coderen voordat u het geheim maakt. Als u een geheim wilt maken met de waarde voor tekst zonder opmaak en Kubernetes deze automatisch wilt laten coderen, gebruikt stringData u in plaats van data:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
stringData:
  key_name: "key value in plain format"

De toepassing ontvangt de gedecodeerde geheime tekenreeks als de waarde die eraan wordt doorgegeven in plaats van de gecodeerde tekenreeks.

Updates van geheimen

Alle geheimen die als volumes in een pod worden gekoppeld, worden automatisch bijgewerkt zodra hun waarde is gewijzigd. Deze wijziging kan niet onmiddellijk optreden vanwege de Kubelet-configuratie, maar dit gebeurt automatisch, zodat de pod niet opnieuw hoeft te worden opgestart.

In gevallen waarin geheimen zijn gebonden aan omgevingsvariabelen die niet automatisch worden bijgewerkt, waardoor het noodzakelijk is om de Pod opnieuw te starten voordat de wijzigingen van kracht worden.

Test uw kennis

1.

Waarom zijn Kubernetes-geheimen veiliger dan tekstwaarden zonder opmaak?

2.

Hoe kunt u geheimen gebruiken in een toepassing?

3.

Hoe wordt base64 gebruikt in geheimen?