ืกืคืจ "Kubernetes for DevOps"

ืกืคืจ "Kubernetes for DevOps" ืฉืœื•ื ืชื•ืฉื‘ื™ ื—ื‘ืจื•! Kubernetes ื”ื•ื ืื—ื“ ื”ืžืจื›ื™ื‘ื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืœ ืžืขืจื›ืช ื”ืืงื•ืœื•ื’ื™ืช ื”ืžื•ื“ืจื ื™ืช ืฉืœ ื”ืขื ืŸ. ื˜ื›ื ื•ืœื•ื’ื™ื” ื–ื• ืžืกืคืงืช ืืžื™ื ื•ืช, ืžื“ืจื’ื™ื•ืช ื•ื’ืžื™ืฉื•ืช ืœื•ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืฉืœ ืžื™ื›ืœ. ื’'ื•ืŸ ืืจื ื“ืœ ื•ื’'ืกื˜ื™ืŸ ื“ื•ืžื™ื ื’ื•ืก ืžื“ื‘ืจื™ื ืขืœ ื”ืžืขืจื›ืช ื”ืืงื•ืœื•ื’ื™ืช ืฉืœ Kubernetes ื•ืžืฆื™ื’ื™ื ืคืชืจื•ื ื•ืช ืžื•ื›ื—ื™ื ืœื‘ืขื™ื•ืช ื™ื•ืžื™ื•ืžื™ื•ืช. ืฆืขื“ ืื—ืจ ืฆืขื“, ืชื‘ื ื” ืืคืœื™ืงืฆื™ื” ืžืงื•ืจื™ืช ื‘ืขื ืŸ ืžืฉืœืš ื•ืชื™ืฆื•ืจ ืืช ื”ืชืฉืชื™ืช ืฉืชืชืžื•ืš ื‘ื”, ืชื’ื“ื™ืจ ืกื‘ื™ื‘ืช ืคื™ืชื•ื— ื•ืฆื™ื ื•ืจ ืคืจื™ืกื” ืžืชืžืฉืš ืฉื™ืขื–ื•ืจ ืœืš ื‘ืžื”ืœืš ื”ืขื‘ื•ื“ื” ืขืœ ื”ื™ื™ืฉื•ืžื™ื ื”ื‘ืื™ื ืฉืœืš.

โ€ข ื”ืชื—ืœ ืขื ืงื•ื ื˜ื™ื™ื ืจื™ื ื•-Kubernetes ืžื”ื™ืกื•ื“ื•ืช: ืื™ืŸ ืฆื•ืจืš ื‘ื ื™ืกื™ื•ืŸ ืžื™ื•ื—ื“ ื›ื“ื™ ืœืœืžื•ื“ ืืช ื”ื ื•ืฉื. โ€ข ื”ืคืขืœ ืืฉื›ื•ืœื•ืช ืžืฉืœืš ืื• ื‘ื—ืจ ืฉื™ืจื•ืช Kubernetes ืžื ื•ื”ืœ ืžืืžื–ื•ืŸ, ื’ื•ื’ืœ ื•ื›ื•'. โ€ข ื”ืฉืชืžืฉ ื‘-Kubernetes ืœื ื™ื”ื•ืœ ืžื—ื–ื•ืจ ื”ื—ื™ื™ื ืฉืœ ืžื™ื›ืœ ื•ืฆืจื™ื›ืช ืžืฉืื‘ื™ื. โ€ข ื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืืฉื›ื•ืœื•ืช ืขืœ ืกืžืš ืขืœื•ืช, ื‘ื™ืฆื•ืขื™ื, ื’ืžื™ืฉื•ืช, ื›ื•ื— ื•ืžื“ืจื’ื™ื•ืช. โ€ข ืœืžื“ ืืช ื”ื›ืœื™ื ื”ื˜ื•ื‘ื™ื ื‘ื™ื•ืชืจ ืœืคื™ืชื•ื—, ื‘ื“ื™ืงื” ื•ืคืจื™ืกื” ืฉืœ ื”ื™ื™ืฉื•ืžื™ื ืฉืœืš. โ€ข ืœืžื ืฃ ืืช ืฉื™ื˜ื•ืช ื”ืชืขืฉื™ื™ื” ื”ื ื•ื›ื—ื™ื•ืช ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืื‘ื˜ื—ื” ื•ื‘ืงืจื”. โ€ข ื”ื˜ืžืขืช ืขืงืจื•ื ื•ืช DevOps ื‘ื›ืœ ื”ื—ื‘ืจื” ืฉืœืš ื›ืš ืฉืฆื•ื•ืชื™ ื”ืคื™ืชื•ื— ื™ื•ื›ืœื• ืœืคืขื•ืœ ื‘ืฆื•ืจื” ื’ืžื™ืฉื”, ืžื”ื™ืจื” ื•ื™ืขื™ืœื” ื™ื•ืชืจ.

ืœืžื™ ืžื™ื•ืขื“ ื”ืกืคืจ?

ื”ืกืคืจ ืจืœื•ื•ื ื˜ื™ ื‘ื™ื•ืชืจ ืœืขื•ื‘ื“ื™ ืžื—ืœืงื•ืช ืื“ืžื™ื ื™ืกื˜ืจืฆื™ื” ื”ืื—ืจืื™ื•ืช ืขืœ ืฉืจืชื™ื, ืืคืœื™ืงืฆื™ื•ืช ื•ืฉื™ืจื•ืชื™ื, ื›ืžื• ื’ื ืœืžืคืชื—ื™ื ื”ืžืขื•ืจื‘ื™ื ื‘ื‘ื ื™ื™ืช ืฉื™ืจื•ืชื™ ืขื ืŸ ื—ื“ืฉื™ื ืื• ื‘ื”ืขื‘ืจืช ืืคืœื™ืงืฆื™ื•ืช ืงื™ื™ืžื•ืช ืœ-Kubernetes ื•ื”ืขื ืŸ. ืืœ ื“ืื’ื”, ืื™ื ืš ืฆืจื™ืš ืœื“ืขืช ืื™ืš ืœืขื‘ื•ื“ ืขื Kubernetes ืื• ืงื•ื ื˜ื™ื™ื ืจื™ื - ืื ื—ื ื• ื ืœืžื“ ืื•ืชืš ื”ื›ืœ.

ืžืฉืชืžืฉื™ Kubernetes ืžื ื•ืกื™ื ื™ืžืฆืื• ื’ื ืขืจืš ืจื‘, ืขื ืกื™ืงื•ืจ ืžืขืžื™ืง ืฉืœ ื ื•ืฉืื™ื ื›ื’ื•ืŸ RBAC, ืคืจื™ืกื” ืจืฆื™ืคื”, ื ื™ื”ื•ืœ ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื•ืฆืคื™ื™ื”. ืื ื• ืžืงื•ื•ื™ื ืฉื“ืคื™ ื”ืกืคืจ ื‘ื”ื—ืœื˜ ื™ื›ื™ืœื• ืžืฉื”ื• ืžืขื ื™ื™ืŸ ืขื‘ื•ืจืš, ืœืœื ืงืฉืจ ืœื›ื™ืฉื•ืจื™ืš ื•ืœื ื™ืกื™ื•ืŸ ืฉืœืš.

ืขืœ ืื™ืœื• ืฉืืœื•ืช ืขื•ื ื” ื”ืกืคืจ?

ืชื•ืš ื›ื“ื™ ืชื›ื ื•ืŸ ื•ื›ืชื™ื‘ืช ื”ืกืคืจ, ื“ื ื• ื‘ื˜ื›ื ื•ืœื•ื’ื™ื™ืช ื”ืขื ืŸ ื•ื‘-Kubernetes ืขื ืžืื•ืช ืื ืฉื™ื, ืฉื•ื—ื—ื ื• ืขื ืžื•ื‘ื™ืœื™ ืชืขืฉื™ื™ื” ื•ืžื•ืžื—ื™ื ื›ืžื• ื’ื ืขื ื˜ื™ืจื•ื ื™ื. ืœื”ืœืŸ ืฉืืœื•ืช ื ื‘ื—ืจื•ืช ืฉื”ื ื”ื™ื• ืจื•ืฆื™ื ืœืงื‘ืœ ืžืขื ื” ื‘ืคืจืกื•ื ื–ื”.

  • "ืื ื™ ืžืชืขื ื™ื™ืŸ ืžื“ื•ืข ื›ื“ืื™ ืœื”ืฉืงื™ืข ื–ืžืŸ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ื•. ืื™ืœื• ื‘ืขื™ื•ืช ื–ื” ื™ืขื–ื•ืจ ืœื™ ื•ืœืฆื•ื•ืช ืฉืœื™ ืœืคืชื•ืจ?"
  • "Kubernetes ื ืจืื” ืžืขื ื™ื™ืŸ, ืื‘ืœ ื™ืฉ ืœื• ืžื—ืกื•ื ื›ื ื™ืกื” ื’ื‘ื•ื” ืœืžื“ื™. ื”ื›ื ืช ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืื™ื ื” ืงืฉื”, ืืš ื ื™ื”ื•ืœ ื•ื ื™ืคื•ื™ ื ื•ืกืฃ ืžืจืชื™ืข. ืื ื—ื ื• ืจื•ืฆื™ื ืœืงื‘ืœ ืขืฆื•ืช ืžื”ื™ืžื ื•ืช ืœื’ื‘ื™ ื”ืื•ืคืŸ ืฉื‘ื• ืื ืฉื™ื ืžื ื”ืœื™ื ืืฉื›ื•ืœื•ืช Kubernetes ื‘ืขื•ืœื ื”ืืžื™ืชื™ ื•ื‘ืื™ืœื• ื‘ืขื™ื•ืช ืื ื—ื ื• ืฆืคื•ื™ื™ื ืœื”ื™ืชืงืœ".
  • "ื™ื™ืขื•ืฅ ืกื•ื‘ื™ื™ืงื˜ื™ื‘ื™ ื™ืขื–ื•ืจ. ื”ืžืขืจื›ืช ื”ืืงื•ืœื•ื’ื™ืช ืฉืœ Kubernetes ืžืขื ื™ืงื” ืœืฆื•ื•ืชื™ื ื—ื“ืฉื™ื ื™ื•ืชืจ ืžื“ื™ ืืคืฉืจื•ื™ื•ืช ืœื‘ื—ื™ืจื”. ื›ืฉื™ืฉ ื›ืžื” ื“ืจื›ื™ื ืœืขืฉื•ืช ืืช ืื•ืชื• ื”ื“ื‘ืจ, ืื™ืš ื™ื•ื“ืขื™ื ืื™ื–ื• ืžื”ืŸ ื”ื›ื™ ื˜ื•ื‘ื”? ืื™ืš ืœืขืฉื•ืช ื‘ื—ื™ืจื”?

ื•ืื•ืœื™ ื”ื—ืฉื•ื‘ื” ืžื›ืœ ื”ืฉืืœื•ืช:

  • "ื›ื™ืฆื“ ืื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘-Kubernetes ืžื‘ืœื™ ืœื”ืคืจื™ืข ืœื—ื‘ืจื” ืฉืœื™?"

ืงื˜ืข. ืชืฆื•ืจื” ื•ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื

ื”ื™ื›ื•ืœืช ืœื”ืคืจื™ื“ ืืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื™ื™ืฉื•ื Kubernetes ืžื”ืชืฆื•ืจื” ืฉืœื• (ื›ืœื•ืžืจ, ืžื›ืœ ืขืจื›ื™ื ืื• ื”ื’ื“ืจื•ืช ืฉืขืฉื•ื™ื™ื ืœื”ืฉืชื ื•ืช ืขื ื”ื–ืžืŸ) ืฉื™ืžื•ืฉื™ืช ืžืื•ื“. ืขืจื›ื™ ืชืฆื•ืจื” ื›ื•ืœืœื™ื ื‘ื“ืจืš ื›ืœืœ ื”ื’ื“ืจื•ืช ืกืคืฆื™ืคื™ื•ืช ืœืกื‘ื™ื‘ื”, ื›ืชื•ื‘ื•ืช DNS ืฉืœ ืฉื™ืจื•ืช ืฆื“ ืฉืœื™ืฉื™ ื•ืื™ืฉื•ืจื™ ืื™ืžื•ืช.

ื›ืžื•ื‘ืŸ ืฉื ื™ืชืŸ ืœื”ื›ื ื™ืก ืืช ื›ืœ ื–ื” ื™ืฉื™ืจื•ืช ืœืงื•ื“, ืืš ื’ื™ืฉื” ื–ื• ืื™ื ื” ื’ืžื™ืฉื” ืžืกืคื™ืง. ืœื“ื•ื’ืžื”, ืฉื™ื ื•ื™ ืขืจืš ืชืฆื•ืจื” ื™ื—ื™ื™ื‘ ืื•ืชืš ืœื‘ื ื•ืช ื•ืœืคืจื•ืก ืฉื•ื‘ ืืช ื”ืงื•ื“ ืฉืœืš. ืคืชืจื•ืŸ ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘ ื™ื”ื™ื” ืœื”ืคืจื™ื“ ืืช ื”ืชืฆื•ืจื” ืžื”ืงื•ื“ ื•ืœืงืจื•ื ืื•ืชื” ืžืงื•ื‘ืฅ ืื• ืžืฉืชื ื™ ืกื‘ื™ื‘ื”.

Kubernetes ืžืกืคืงืช ืžืกืคืจ ื“ืจื›ื™ื ืฉื•ื ื•ืช ืœื ื™ื”ื•ืœ ืชืฆื•ืจื”. ืจืืฉื™ืช, ืืชื” ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืขืจื›ื™ื ืœื™ื™ืฉื•ื ื“ืจืš ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ืฉืฆื•ื™ื ื• ื‘ืžืคืจื˜ ืขื˜ื™ืคืช ื”ืคื•ื“ (ืจืื” "ืžืฉืชื ื™ ืกื‘ื™ื‘ื”" ื‘ืขืžื•ื“ 192). ืฉื ื™ืช, ื ื™ืชืŸ ืœืื—ืกืŸ ื ืชื•ื ื™ ืชืฆื•ืจื” ื™ืฉื™ืจื•ืช ื‘-Kubernetes ื‘ืืžืฆืขื•ืช ConfigMap ื•ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื.

ื‘ืคืจืง ื–ื”, ืื ื• ื—ื•ืงืจื™ื ืืช ื”ืื•ื‘ื™ื™ืงื˜ื™ื ื”ืœืœื• ื‘ืคื™ืจื•ื˜ ื•ื‘ื•ื—ื ื™ื ื›ืžื” ื’ื™ืฉื•ืช ืžืขืฉื™ื•ืช ืœื ื™ื”ื•ืœ ืชืฆื•ืจื” ื•ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื‘ืืžืฆืขื•ืช ื™ื™ืฉื•ื ื”ื“ื’ืžื”.

ืขื“ื›ื•ืŸ ืงืœื™ืคื•ืช ืคื•ื“ ื›ืืฉืจ ื”ืชืฆื•ืจื” ืžืฉืชื ื”

ืชืืจ ืœืขืฆืžืš ืฉื™ืฉ ืœืš ืคืจื™ืกื” ื‘ืืฉื›ื•ืœ ืฉืœืš ื•ืืชื” ืจื•ืฆื” ืœืฉื ื•ืช ื›ืžื” ืขืจื›ื™ื ื‘-ConfigMap ืฉืœื•. ืื ืืชื” ืžืฉืชืžืฉ ื‘ืชืจืฉื™ื ื”ื”ื’ื” (ืจืื” "ื”ื’ื”: ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช ืขื‘ื•ืจ Kubernetes" ื‘ืขืžื•ื“ 102), ืชื•ื›ืœ ืœื–ื”ื•ืช ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืฉื™ื ื•ื™ ืชืฆื•ืจื” ื•ืœื˜ืขื•ืŸ ืžื—ื“ืฉ ืืช ืงื•ื ื›ื™ื•ืช ื”ืคื•ื“ ืฉืœืš ื‘ื˜ืจื™ืง ืื—ื“ ืžืกื•ื“ืจ. ื”ื•ืกืฃ ืืช ื”ื”ืขืจื” ื”ื‘ืื” ืœืžืคืจื˜ ื”ืคืจื™ืกื” ืฉืœืš:

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

ืชื‘ื ื™ืช ื”ืคืจื™ืกื” ืžื›ื™ืœื” ื›ืขืช ืกื›ื•ื ื‘ื“ื™ืงื” ืฉืœ ืคืจืžื˜ืจื™ ืชืฆื•ืจื”: ืื ื”ืคืจืžื˜ืจื™ื ื™ืฉืชื ื•, ื”ืกื›ื•ื ื™ืขื•ื“ื›ืŸ. ืื ืชืคืขื™ืœ ืฉื“ืจื•ื’ ื”ื”ื’ื”, Helm ื™ื–ื”ื” ืฉืžืคืจื˜ ื”ืคืจื™ืกื” ื”ืฉืชื ื” ื•ื™ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื›ืœ ืžืขื˜ืคื•ืช ื”ืคื•ื“.

ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื‘-Kubernetes

ืื ื—ื ื• ื›ื‘ืจ ื™ื•ื“ืขื™ื ืฉืื•ื‘ื™ื™ืงื˜ ConfigMap ืžืกืคืง ืžื ื’ื ื•ืŸ ื’ืžื™ืฉ ืœืื—ืกื•ืŸ ื•ื’ื™ืฉื” ืœื ืชื•ื ื™ ืชืฆื•ืจื” ื‘ืืฉื›ื•ืœ. ืขื ื–ืืช, ืœืจื•ื‘ ื”ื™ื™ืฉื•ืžื™ื ื™ืฉ ืžื™ื“ืข ืจื’ื™ืฉ ื•ืจื’ื™ืฉ, ื›ื’ื•ืŸ ืกื™ืกืžืื•ืช ืื• ืžืคืชื—ื•ืช API. ื ื™ืชืŸ ืœืื—ืกืŸ ืื•ืชื• ื’ื ื‘-ConfigMap, ืืš ืคืชืจื•ืŸ ื–ื” ืื™ื ื• ืื™ื“ื™ืืœื™.

ื‘ืžืงื•ื ื–ืืช, Kubernetes ืžืฆื™ืขื” ืกื•ื’ ืžื™ื•ื—ื“ ืฉืœ ืื•ื‘ื™ื™ืงื˜ ืฉื ื•ืขื“ ืœืื—ืกืŸ ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื: ืกื•ื“. ืœืื—ืจ ืžื›ืŸ, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ื›ื™ืฆื“ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืื•ื‘ื™ื™ืงื˜ ื–ื” ื‘ืืคืœื™ืงืฆื™ื™ืช ื”ื”ื“ื’ืžื” ืฉืœื ื•.

ื›ื“ื™ ืœื”ืชื—ื™ืœ, ืขื™ื™ืŸ ื‘ืžื ื™ืคืกื˜ Kubernetes ืขื‘ื•ืจ ื”ืื•ื‘ื™ื™ืงื˜ ื”ืกื•ื“ื™ (ืจืื” hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

ื‘ื“ื•ื’ืžื” ื–ื•, ื”ืžืคืชื— ื”ืคืจื˜ื™ ืฉืœ magicWord ื”ื•ื xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). ื”ืžื™ืœื” xyzzy ื”ื™ื ื‘ื“ืจืš ื›ืœืœ ืฉื™ืžื•ืฉื™ืช ืžืื•ื“ ื‘ืขื•ืœื ื”ืžื—ืฉื‘ื™ื. ื‘ื“ื•ืžื” ืœ-ConfigMap, ืืชื” ื™ื›ื•ืœ ืœืื—ืกืŸ ืžืกืคืจ ืžืคืชื—ื•ืช ื•ืขืจื›ื™ื ื‘ืื•ื‘ื™ื™ืงื˜ ืกื•ื“ื™. ื›ืืŸ, ืœืžืขืŸ ื”ืคืฉื˜ื•ืช, ืื ื• ืžืฉืชืžืฉื™ื ืจืง ื‘ื–ื•ื’ ืžืคืชื—-ืขืจืš ืื—ื“.

ืฉื™ืžื•ืฉ ื‘ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ื›ืžืฉืชื ื™ ืกื‘ื™ื‘ื”

ื›ืžื• ConfigMap, ื ื™ืชืŸ ืœื”ืคื•ืš ืืช ื”ืื•ื‘ื™ื™ืงื˜ Secret ืœื–ืžื™ืŸ ื‘ืžื™ื›ืœ ื›ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ืื• ื›ืงื•ื‘ืฅ ื‘ื“ื™ืกืง ืฉืœื•. ื‘ื“ื•ื’ืžื” ื”ื‘ืื”, ื ืงืฆื” ืžืฉืชื ื” ืกื‘ื™ื‘ื” ืœืขืจืš ืžืชื•ืš Secret:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื” ื‘ืžืื’ืจ ื”ื”ื“ื’ืžื” ื›ื“ื™ ืœื”ื—ื™ืœ ืืช ื”ืžื ื™ืคืกื˜ื™ื:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

ื›ืžื• ืงื•ื“ื, ื”ืขื‘ืจ ืืช ื”ื™ืฆื™ืื” ื”ืžืงื•ืžื™ืช ืœืคืจื™ืกื” ื›ื“ื™ ืœืจืื•ืช ืืช ื”ืชื•ืฆืื” ื‘ื“ืคื“ืคืŸ ืฉืœืš:

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

ื›ืฉืคื•ืชื—ื™ื ื›ืชื•ื‘ืช localhost:9999/ ืืชื” ืืžื•ืจ ืœืจืื•ืช ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

The magic word is "xyzzy"

ื›ืชื™ื‘ืช ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ืœืงื‘ืฆื™ื

ื‘ื“ื•ื’ืžื” ื–ื•, ื ืฆืจืฃ ืืช ื”ืื•ื‘ื™ื™ืงื˜ Secret ืœ-container ื›ืงื•ื‘ืฅ. ื”ืงื•ื“ ืžืžื•ืงื ื‘ืชื™ืงื™ื™ืช hello-secret-file ืฉืœ ืžืื’ืจ ื”ื”ื“ื’ืžื”.

ื›ื“ื™ ืœื—ื‘ืจ ืืช ืกื•ื“ ื›ืงื•ื‘ืฅ, ื ืฉืชืžืฉ ื‘ืคืจื™ืกื” ื”ื‘ืื”:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

ื›ืžื• ื‘ืกืขื™ืฃ ื”ืžืฉื ื” "ื™ืฆื™ืจืช ืงื•ื‘ืฆื™ ืชืฆื•ืจื” ืžืื•ื‘ื™ื™ืงื˜ื™ ConfigMap" ื‘ืขืžื•ื“. 240, ืื ื• ื™ื•ืฆืจื™ื ื ืคื— (ื‘ืžืงืจื” ื–ื” demo-secret-volume) ื•ืžืจื›ื™ื‘ื™ื ืื•ืชื• ืœืžื™ื›ืœ ื‘ืงื˜ืข volumeMounts ืฉืœ ื”ืžืคืจื˜. ื”ืฉื“ื” mountPath ื”ื•ื /secrets, ืื– Kubernetes ืชื™ืฆื•ืจ ืงื•ื‘ืฅ ืื—ื“ ื‘ืชื™ืงื™ื™ื” ื–ื• ืขื‘ื•ืจ ื›ืœ ื–ื•ื’ ืžืคืชื—/ืขืจืš ื”ืžื•ื’ื“ืจ ื‘ืื•ื‘ื™ื™ืงื˜ ื”ืกื•ื“ื™.

ื‘ื“ื•ื’ืžื” ืฉืœื ื•, ื”ื’ื“ืจื ื• ืจืง ื–ื•ื’ ืžืคืชื—-ืขืจืš ืื—ื“ ื‘ืฉื magicWord, ื›ืš ืฉื”ืžื ื™ืคืกื˜ ื™ืฆื•ืจ ืงื•ื‘ืฅ ืงืจื™ืื” ื‘ืœื‘ื“ /secrets/magicWord ืขื ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื‘ืžื™ื›ืœ.

ืื ืชื—ื™ืœ ืืช ื”ืžื ื™ืคืกื˜ ื”ื–ื” ื‘ืื•ืชื• ืื•ืคืŸ ื›ืžื• ื”ื“ื•ื’ืžื” ื”ืงื•ื“ืžืช, ืืชื” ืืžื•ืจ ืœืงื‘ืœ ืืช ืื•ืชื” ืชื•ืฆืื”:

The magic word is "xyzzy"

ืงืจื™ืืช ื—ืคืฆื™ื ืกื•ื“ื™ื™ื

ื‘ืกืขื™ืฃ ื”ืงื•ื“ื, ื”ืฉืชืžืฉื ื• ื‘ืคืงื•ื“ื” kubectl describe ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืชื•ื›ืŸ ืฉืœ ConfigMap. ื”ืื ื ื™ืชืŸ ืœืขืฉื•ืช ืืช ืื•ืชื• ื”ื“ื‘ืจ ืขื Secret?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

ืฉื™ืžื• ืœื‘ ืฉื”ื ืชื•ื ื™ื ืขืฆืžื ืื™ื ื ืžื•ืฆื’ื™ื. ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ื‘-Kubernetes ื”ื ืžืกื•ื’ ืื˜ื•ื, ื›ืœื•ืžืจ ืชื•ื›ื ื ืื™ื ื• ืžื•ืฆื’ ื‘-kubectl ืžืชืืจ ืคืœื˜, ื›ื ื™ืกื•ืช ื™ื•ืžืŸ ืื• ื”ื˜ืจืžื™ื ืœ, ืžื” ืฉื”ื•ืคืš ืืช ื–ื” ืœื‘ืœืชื™ ืืคืฉืจื™ ืœื—ืฉื•ืฃ ื‘ื˜ืขื•ืช ืžื™ื“ืข ืจื’ื™ืฉ.

ื›ื“ื™ ืœื”ืฆื™ื’ ื’ืจืกืช YAML ืžืงื•ื“ื“ืช ืฉืœ ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื, ื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” kubectl get:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

ืžื”ื• eHl6enk=, ืฉื•ื ื” ืœื—ืœื•ื˜ื™ืŸ ืžื”ืขืจืš ื”ืžืงื•ืจื™ ืฉืœื ื•? ื–ื”ื• ืœืžืขืฉื” ืื•ื‘ื™ื™ืงื˜ ืกื•ื“ื™, ื”ืžื™ื•ืฆื’ ื‘ืงื™ื“ื•ื“ base64. Base64 ื”ื™ื ืกื›ื™ืžื” ืœืงื™ื“ื•ื“ ื ืชื•ื ื™ื ื‘ื™ื ืืจื™ื™ื ืฉืจื™ืจื•ืชื™ื™ื ื›ืžื—ืจื•ื–ืช ืฉืœ ืชื•ื•ื™ื.

ืžื›ื™ื•ื•ืŸ ืฉืžื™ื“ืข ืจื’ื™ืฉ ืขืฉื•ื™ ืœื”ื™ื•ืช ื‘ื™ื ืืจื™ ื•ืœื ืคืœื˜ (ื›ืคื™ ืฉืงื•ืจื” ืขื ืžืคืชื— ื”ืฆืคื ื” TLS), ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ืžืื•ื—ืกื ื™ื ืชืžื™ื“ ื‘ืคื•ืจืžื˜ base64.

ื”ื˜ืงืกื˜ beHl6enk= ื”ื•ื ื”ื’ืจืกื” ื”ืžืงื•ื“ื“ืช base64 ืฉืœ ื”ืžื™ืœื” ื”ืกื•ื“ื™ืช ืฉืœื ื• xyzzy. ืืชื” ื™ื›ื•ืœ ืœืืžืช ื–ืืช ืขืœ ื™ื“ื™ ื”ืคืขืœืช ื”ืคืงื•ื“ื” base64 โ€”decode ื‘ื˜ืจืžื™ื ืœ:

echo "eHl6enk=" | base64 --decode
xyzzy

ืœื›ืŸ, ื‘ืขื•ื“ ืฉ-Kubernetes ืžื’ืŸ ืขืœื™ืš ืžืคื ื™ ื”ืคืœื˜ ื‘ื˜ืขื•ืช ืฉืœ ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื‘ืžืกื•ืฃ ืื• ื‘ืงื‘ืฆื™ ื”ื™ื•ืžืŸ, ืื ื™ืฉ ืœืš ื”ืจืฉืื•ืช ืงืจื™ืื” ืขืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ื‘ืžืจื—ื‘ ืฉืžื•ืช ืกืคืฆื™ืคื™, ื ื™ืชืŸ ืœื‘ืกืก ืืช ื”ื ืชื•ื ื™ื ื”ืœืœื• ื•ืœืคืขื ื— ืื•ืชื.

ืื ืืชื” ืฆืจื™ืš ืœืงื•ื“ื“ ื˜ืงืกื˜ ื‘-base64 (ืœื“ื•ื’ืžื”, ืœืฉื™ื ืื•ืชื• ื‘ืกื•ื“), ื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” base64 ืœืœื ืืจื’ื•ืžื ื˜ื™ื:

echo xyzzy | base64
eHl6enkK

ื’ื™ืฉื” ืœื—ืคืฆื™ื ืกื•ื“ื™ื™ื

ืžื™ ื™ื›ื•ืœ ืœืงืจื•ื ื•ืœืขืจื•ืš ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื? ื–ื” ื ืงื‘ืข ืขืœ ื™ื“ื™ RBAC, ืžื ื’ื ื•ืŸ ื‘ืงืจืช ื’ื™ืฉื” (ื ื“ื•ืŸ ื‘ื• ื‘ืคื™ืจื•ื˜ ื‘ืชืช-ืกืขื™ืฃ "ืžื‘ื•ื ืœื‘ืงืจืช ื’ื™ืฉื” ืžื‘ื•ืกืกืช ืชืคืงื™ื“ื™ื" ื‘ืขืžื•ื“ 258). ืื ืืชื” ืžืคืขื™ืœ ืืฉื›ื•ืœ ืฉืื™ืŸ ืœื• RBAC ืื• ืฉืื™ื ื• ืžื•ืคืขืœ, ื›ืœ ื”ืื•ื‘ื™ื™ืงื˜ื™ื ื”ืกื•ื“ื™ื™ื ืฉืœืš ื–ืžื™ื ื™ื ืœื›ืœ ืžืฉืชืžืฉ ื•ืžื›ื•ืœื” (ื ืกื‘ื™ืจ ื‘ื”ืžืฉืš ืฉืœื ืืžื•ืจ ืœื”ื™ื•ืช ืœืš ืืฉื›ื•ืœื•ืช ื™ื™ืฆื•ืจ ืœืœื RBAC).

ื”ืฆืคื ืช ื ืชื•ื ื™ื ืคืกื™ื‘ื™ืช

ืžื” ืขื ืืœื” ืฉื™ืฉ ืœื”ื ื’ื™ืฉื” ืœืžืกื“ ื”ื ืชื•ื ื™ื etcd ืฉื‘ื• Kubernetes ืžืื—ืกืŸ ืืช ื›ืœ ื”ืžื™ื“ืข ืฉืœื•? ื”ืื ื”ื ื™ื›ื•ืœื™ื ืœืงืจื•ื ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ืžื‘ืœื™ ืœืงื‘ืœ ื”ืจืฉืื” ืœืงืจื•ื ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ื“ืจืš ื”-API?

ืžืื– ื’ืจืกื” 1.7, Kubernetes ืชื•ืžืš ื‘ื”ืฆืคื ืช ื ืชื•ื ื™ื ืคืกื™ื‘ื™ืช. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืžื™ื“ืข ืจื’ื™ืฉ ื‘ืชื•ืš etcd ืžืื•ื—ืกืŸ ืžื•ืฆืคืŸ ื‘ื“ื™ืกืง ื•ืœื ื ื™ืชืŸ ืœืงืจื•ื ืื•ืชื• ืืคื™ืœื• ืขืœ ื™ื“ื™ ื‘ืขืœื™ ื’ื™ืฉื” ื™ืฉื™ืจื” ืœืžืกื“ ื”ื ืชื•ื ื™ื. ื›ื“ื™ ืœืคืขื ื— ืื•ืชื•, ืืชื” ืฆืจื™ืš ืžืคืชื— ืฉื™ืฉ ืจืง ืœืฉืจืช ื”-API ืฉืœ Kubernetes. ื‘ืืฉื›ื•ืœ ืฉื”ื•ื’ื“ืจ ื›ื”ืœื›ื”, ื™ืฉ ืœื”ืคืขื™ืœ ื”ืฆืคื ื” ืคืกื™ื‘ื™ืช.

ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง ืื ื”ืฆืคื ื” ืคืกื™ื‘ื™ืช ืคื•ืขืœืช ื‘ืืฉื›ื•ืœ ืฉืœืš ื‘ื“ืจืš ื–ื•:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

ืื ืื™ื ืš ืจื•ืื” ืืช ื”ื“ื’ืœ experimental-encryption-provider-config, ื”ืฆืคื ื” ืคืกื™ื‘ื™ืช ืื™ื ื” ืžื•ืคืขืœืช. ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-Google Kubernetes Engine ืื• ืฉื™ืจื•ืชื™ ื ื™ื”ื•ืœ ืื—ืจื™ื ืฉืœ Kubernetes, ื”ื ืชื•ื ื™ื ืฉืœืš ืžื•ืฆืคื ื™ื ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ ืื—ืจ, ื›ืš ืฉื”ื“ื’ืœ ืœื ื™ื”ื™ื” ืงื™ื™ื. ื‘ื“ื•ืง ืขื ืกืคืง Kubernetes ืฉืœืš ื›ื“ื™ ืœืจืื•ืช ืื ืชื•ื›ืŸ etcd ืžื•ืฆืคืŸ.

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื—ืกื•ื™ื™ื

ื™ืฉื ื ื›ืžื” ืžืฉืื‘ื™ Kubernetes ืฉืืกื•ืจ ืœื”ืกื™ืจ ืžื”ืืฉื›ื•ืœ, ื›ื’ื•ืŸ ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื ืจื’ื™ืฉื™ื ื‘ื™ื•ืชืจ. ืืชื” ื™ื›ื•ืœ ืœื”ื’ืŸ ืขืœ ืžืฉืื‘ ืžืคื ื™ ืžื—ื™ืงื” ื‘ืืžืฆืขื•ืช ื”ืขืจื” ืฉืกื•ืคืง ืขืœ ื™ื“ื™ ืžื ื”ืœ Helm:

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

ืืกื˜ืจื˜ื’ื™ื•ืช ื ื™ื”ื•ืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืกื•ื“ื™ื™ื

ื‘ื“ื•ื’ืžื” ืžื”ืกืขื™ืฃ ื”ืงื•ื“ื, ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื”ื™ื• ืžื•ื’ื ื™ื ืžืคื ื™ ื’ื™ืฉื” ืœื ืžื•ืจืฉื™ืช ืžื™ื“ ืœืื—ืจ ืฉืžื™ืจืชื ื‘ืืฉื›ื•ืœ. ืื‘ืœ ื‘ืงื•ื‘ืฆื™ ืžื ื™ืคืกื˜ ื”ื ืื•ื—ืกื ื• ื›ื˜ืงืกื˜ ืจื’ื™ืœ.

ืœืขื•ืœื ืืœ ืชืฆื™ื‘ ืžื™ื“ืข ืกื•ื“ื™ ื‘ืงื‘ืฆื™ื ืฉื ืžืฆืื™ื ื‘ื‘ืงืจืช ื’ืจืกืื•ืช. ื›ื™ืฆื“ ืชื•ื›ืœ ืœื ื”ืœ ื•ืœืื—ืกืŸ ืžื™ื“ืข ื–ื” ื‘ืฆื•ืจื” ืžืื•ื‘ื˜ื—ืช ืœืคื ื™ ื”ื—ืœืชื• ืขืœ ืืฉื›ื•ืœ Kubernetes ืฉืœืš?

ืืชื” ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ื›ืœื™ื ืื• ืืกื˜ืจื˜ื’ื™ื•ืช ืœื˜ื™ืคื•ืœ ื‘ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื‘ื™ื™ืฉื•ืžื™ื ืฉืœืš, ืืš ืขื“ื™ื™ืŸ ืชืฆื˜ืจืš ืœืขื ื•ืช ืœืคื—ื•ืช ืขืœ ื”ืฉืืœื•ืช ื”ื‘ืื•ืช.

  • ื”ื™ื›ืŸ ื™ืฉ ืœืื—ืกืŸ ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ื›ืš ืฉื™ื”ื™ื” ื ื’ื™ืฉ ื‘ื™ื•ืชืจ?
  • ื›ื™ืฆื“ ืœื”ื ื’ื™ืฉ ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ืœื™ื™ืฉื•ืžื™ื ื”ืคืขื™ืœื™ื ืฉืœืš?
  • ืžื” ืฆืจื™ืš ืœืงืจื•ืช ืœื™ื™ืฉื•ืžื™ื ืฉืœืš ื›ืฉืืชื” ืžื—ืœื™ืฃ ืื• ืขื•ืจืš ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื?

ืขืœ ื”ืžื—ื‘ืจื™ื

ื’'ื•ืŸ ืืจื ื“ืœ ื”ื•ื ื™ื•ืขืฅ ื‘ืขืœ ื ื™ืกื™ื•ืŸ ืฉืœ 30 ืฉื ื” ื‘ืชืขืฉื™ื™ืช ื”ืžื—ืฉื‘ื™ื. ื”ื•ื ื›ืชื‘ ืžืกืคืจ ืกืคืจื™ื ื•ืขื•ื‘ื“ ืขื ื—ื‘ืจื•ืช ืจื‘ื•ืช ืžืžื“ื™ื ื•ืช ืฉื•ื ื•ืช, ื•ืžื™ื™ืขืฅ ืœื”ืŸ ืขืœ ืชืฉืชื™ื•ืช ืขื ืŸ ื•-Kubernetes. ื‘ื–ืžื ื• ื”ืคื ื•ื™ ื”ื•ื ื ื”ื ื” ืœื’ืœื•ืฉ, ื™ื•ืจื” ื‘ืืงื“ื—ื™ื ื˜ื•ื‘ ื•ืžื ื’ืŸ ื‘ืคืกื ืชืจ ื›ื—ื•ื‘ื‘ืŸ. ื’ืจ ื‘ืงื•ื˜ื’' ืžื”ืื’ื“ื•ืช ื‘ืงื•ืจื ื•ื•ืœ, ืื ื’ืœื™ื”.

ื’'ืกื˜ื™ืŸ ื“ื•ืžื™ื ื’ื•ืก - ืžื”ื ื“ืก ื ื™ื”ื•ืœ ืžืขืจื›ื•ืช ืฉืขื•ื‘ื“ ื‘ืกื‘ื™ื‘ืช DevOps ืขื Kubernetes ื•ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืขื ืŸ. ื”ื•ื ื ื”ื ื” ืœื‘ืœื•ืช ื‘ื—ื•ืฅ, ืœืฉืชื•ืช ืงืคื”, ืœื—ื˜ื˜ ื•ืœืฉื‘ืช ืœื™ื“ ื”ืžื—ืฉื‘. ื’ืจ ื‘ืกื™ืื˜ืœ, ื•ื•ืฉื™ื ื’ื˜ื•ืŸ, ืขื ื—ืชื•ืœ ื ืคืœื ื•ืื™ืฉื” ื•ื—ื‘ืจื” ื”ื›ื™ ื˜ื•ื‘ื” ืขื•ื“ ื™ื•ืชืจ, ืื“ืจื™ืืŸ.

ยป ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ื”ืกืคืจ ื ื™ืชืŸ ืœืžืฆื•ื ื‘ื›ืชื•ื‘ืช ืืชืจ ื”ืื™ื ื˜ืจื ื˜ ืฉืœ ื”ื”ื•ืฆืื” ืœืื•ืจ
ยป ืชื•ื›ืŸ ื”ืขื ื™ื™ื ื™ื
ยป ืงื˜ืข

ืขื‘ื•ืจ Khabrozhiteley 25% ื”ื ื—ื” ื‘ืืžืฆืขื•ืช ืงื•ืคื•ืŸ - ืงื•ื‘ืจื ื˜

ื‘ืชืฉืœื•ื ื’ืจืกืช ื”ื ื™ื™ืจ ืฉืœ ื”ืกืคืจ ื™ืฉืœื— ืกืคืจ ืืœืงื˜ืจื•ื ื™ ื‘ืžื™ื™ืœ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”