ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ื ื›ื•ืŸ, ืื—ืจื™ ื”ืฉื—ืจื•ืจ Hashicorp Consul 1.5.0 ื‘ืชื—ื™ืœืช ืžืื™ 2019, ื‘-Consul ืชื•ื›ืœ ืœืืฉืจ ื™ื™ืฉื•ืžื™ื ื•ืฉื™ืจื•ืชื™ื ื”ืคื•ืขืœื™ื ื‘-Kubernetes ื‘ืื•ืคืŸ ืžืงื•ืจื™.

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

ืกืงื™ืจื”

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

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ืชืจืฉื™ื 1: ืกืงื™ืจื” ืจืฉืžื™ืช ืฉืœ ืฉื™ื˜ืช ืื™ืฉื•ืจ ื”ืงื•ื ืกื•ืœ

ื‘ื•ืื• ื ืกืชื›ืœ ืคื ื™ืžื” ืชื™ืขื•ื“ ืขื‘ื•ืจ ืฉื™ื˜ืช ื”ืจืฉืื” ืกืคืฆื™ืคื™ืช ืฉืœ Kubernetes.

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

ืœืคื ื™ ืฉื ืขื‘ื•ืจ ืœื™ืฆื™ืจืช ื”-POC ืฉืœื ื•, ื”ื‘ื” ื ื—ื–ื•ืจ ืœืกืงื™ืจื” ื”ื›ืœืœื™ืช ืฉืœ ืฉื™ื˜ื•ืช ื”ื”ืจืฉืื” ืฉืœ ืงื•ื ืกื•ืœ (ืชืจืฉื™ื 1) ื•ื ื—ื“ื“ ืื•ืชื” ื‘ื”ืงืฉืจ ืฉืœ Kubernetes.

ืื“ืจื™ื›ืœื•ืช

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

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

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ืชืจืฉื™ื 2: ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ืฉื™ื˜ืช ื”ื”ืจืฉืื” ืฉืœ Kubernetes

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

ืื–, ืื ืœื•ืงื—ื™ื ืืช ื“ื™ืื’ืจืžืช ืกืงื™ืจืช ื”ืงื•ื ืกื•ืœ (ืชืจืฉื™ื 1) ื•ืžื—ื™ืœื™ื ืขืœื™ื• ืืช Kubernetes, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ื“ื™ืื’ืจืžื” ืฉืœืžืขืœื” (ืชืจืฉื™ื 2), ื•ื”ื”ื™ื’ื™ื•ืŸ ื›ืืŸ ื”ื•ื ื›ื“ืœืงืžืŸ:

  1. ืœื›ืœ ืคื•ื“ ื™ืฆื•ืจืฃ ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช ื”ืžื›ื™ืœ ืืกื™ืžื•ืŸ JWT ืฉื ื•ืฆืจ ื•ืžื•ื›ืจ ืขืœ ื™ื“ื™ Kubernetes. ืืกื™ืžื•ืŸ ื–ื” ืžื•ื›ื ืก ื’ื ืœืชืจืžื™ืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.
  2. ื”ืืคืœื™ืงืฆื™ื” ืื• ื”ืฉื™ืจื•ืช ืฉืœื ื• ื‘ืชื•ืš ื”ืคื•ื“ ื™ื•ื–ื ืคืงื•ื“ืช ื”ืชื—ื‘ืจื•ืช ืœืœืงื•ื— ื”ืงื•ื ืกื•ืœ ืฉืœื ื•. ื‘ืงืฉืช ื”ื”ืชื—ื‘ืจื•ืช ืชื›ืœื•ืœ ื’ื ืืช ื”ืืกื™ืžื•ืŸ ื•ื”ืฉื ืฉืœื ื• ื ื•ืฆืจ ื‘ืžื™ื•ื—ื“ ืฉื™ื˜ืช ื”ืจืฉืื” (ืกื•ื’ Kubernetes). ืฉืœื‘ ืžืก' 2 ื–ื” ืžืชืื™ื ืœืฉืœื‘ 1 ื‘ืชืจืฉื™ื ื”ืงื•ื ืกื•ืœ (ืกื›ืžื” 1).
  3. ืœืงื•ื— ื”ืงื•ื ืกื•ืœ ืฉืœื ื• ื™ืขื‘ื™ืจ ืืช ื”ื‘ืงืฉื” ื”ื–ื• ืœืฉืจืช ื”ืงื•ื ืกื•ืœ ืฉืœื ื•.
  4. ืงึถืกึถื! ื–ื” ื”ืžืงื•ื ืฉื‘ื• ืฉืจืช ื”-Consul ืžื•ื•ื“ื ืืช ื”ืื•ืชื ื˜ื™ื•ืช ืฉืœ ื”ื‘ืงืฉื”, ืื•ืกืฃ ืžื™ื“ืข ืขืœ ื–ื”ื•ืช ื”ื‘ืงืฉื” ื•ืžืฉื•ื•ื” ืื•ืชื• ืœื›ืœ ื›ืœืœื™ื ืžื•ื’ื“ืจื™ื ืžืจืืฉ ื”ืงืฉื•ืจื™ื ืืœื™ื•. ืœื”ืœืŸ ืชืจืฉื™ื ื ื•ืกืฃ ื›ื“ื™ ืœื”ืžื—ื™ืฉ ื–ืืช. ืฉืœื‘ ื–ื” ืžืชืื™ื ืœืฉืœื‘ื™ื 3, 4 ื•-5 ื‘ืชืจืฉื™ื ืกืงื™ืจืช ื”ืงื•ื ืกื•ืœ (ืชืจืฉื™ื 1).
  5. ืฉืจืช ื”-Consul ืฉืœื ื• ืžื™ื™ืฆืจ ืืกื™ืžื•ืŸ ืงื•ื ืกื•ืœ ืขื ื”ืจืฉืื•ืช ื‘ื”ืชืื ืœื›ืœืœื™ ืฉื™ื˜ืช ื”ื”ืจืฉืื” ืฉืฆื•ื™ื ื• (ืฉื”ื’ื“ืจื ื•) ืœื’ื‘ื™ ื–ื”ื•ืช ื”ืžื‘ืงืฉ. ืœืื—ืจ ืžื›ืŸ ื”ื•ื ื™ืฉืœื— ืืช ื”ืืกื™ืžื•ืŸ ื‘ื—ื–ืจื”. ื–ื” ืžืชืื™ื ืœืฉืœื‘ 6 ื‘ืชืจืฉื™ื ื”ืงื•ื ืกื•ืœ (ืชืจืฉื™ื 1).
  6. ืœืงื•ื— ื”ืงื•ื ืกื•ืœ ืฉืœื ื• ืžืขื‘ื™ืจ ืืช ื”ืืกื™ืžื•ืŸ ืœืืคืœื™ืงืฆื™ื” ืื• ืœืฉื™ืจื•ืช ื”ืžื‘ืงืฉื™ื.

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

ื”ืงืกื ืžืชื’ืœื”!

ืœืืœื• ืžื›ื ืฉืœื ืฉืžื—ื™ื ืจืง ืขื ืืจื ื‘ ืžืชื•ืš ื›ื•ื‘ืข ื•ืจื•ืฆื™ื ืœื“ืขืช ืื™ืš ื–ื” ืขื•ื‘ื“... ื”ืจืฉื• ืœื™ "ืœื”ืจืื•ืช ืœื›ื ื›ืžื” ืขืžื•ืง ื—ื•ืจ ื”ืืจื ื‘".

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

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ืชืจืฉื™ื 3: ื”ืงืกื ืžืชื’ืœื”!

  1. ื›ื ืงื•ื“ืช ื”ืชื—ืœื”, ืœืงื•ื— ื”ืงื•ื ืกื•ืœ ืฉืœื ื• ืžืขื‘ื™ืจ ืืช ื‘ืงืฉืช ื”ื›ื ื™ืกื” ืœืฉืจืช ื”ืงื•ื ืกื•ืœ ืฉืœื ื• ืขื ืืกื™ืžื•ืŸ ื—ืฉื‘ื•ืŸ Kubernetes ื•ืฉื ืžื•ืคืข ืกืคืฆื™ืคื™ ืฉืœ ืฉื™ื˜ืช ื”ื”ืจืฉืื” ืฉื ื•ืฆืจื” ืงื•ื“ื ืœื›ืŸ. ืฉืœื‘ ื–ื” ืžืชืื™ื ืœืฉืœื‘ 3 ื‘ื”ืกื‘ืจ ื”ืžืขื’ืœ ื”ืงื•ื“ื.
  2. ื›ืขืช ืฉืจืช ื”ืงื•ื ืกื•ืœ (ืื• ื”ืžื ื”ื™ื’) ืฆืจื™ืš ืœืืžืช ืืช ื”ืื•ืชื ื˜ื™ื•ืช ืฉืœ ื”ืืกื™ืžื•ืŸ ืฉื”ืชืงื‘ืœ. ืœื›ืŸ, ื”ื™ื ืชืชื™ื™ืขืฅ ืขื ืืฉื›ื•ืœ Kubernetes (ื“ืจืš ื”ืœืงื•ื— ืฉืœ Consul) ื•ืขื ื”ื”ืจืฉืื•ืช ื”ืžืชืื™ืžื•ืช, ื ื‘ืจืจ ืื ื”ืืกื™ืžื•ืŸ ืืžื™ืชื™ ื•ืœืžื™ ื”ื•ื ืฉื™ื™ืš.
  3. ืœืื—ืจ ืžื›ืŸ ื”ื‘ืงืฉื” ื”ืžืื•ืžืชืช ืžื•ื—ื–ืจืช ืœืžื ื”ื™ื’ ื”ืงื•ื ืกื•ืœ, ื•ืฉืจืช ื”ืงื•ื ืกื•ืœ ืžื—ืคืฉ ืืช ืžื•ืคืข ืฉื™ื˜ืช ื”ื”ืจืฉืื” ืขื ื”ืฉื ืฉืฆื•ื™ืŸ ืžื‘ืงืฉืช ื”ื›ื ื™ืกื” (ื•ืกื•ื’ Kubernetes).
  4. ืžื ื”ื™ื’ ื”ืงื•ื ืกื•ืœ ืžื–ื”ื” ืืช ืžื•ืคืข ืฉื™ื˜ืช ื”ื”ืจืฉืื” ืฉืฆื•ื™ืŸ (ืื ื ืžืฆื) ื•ืงื•ืจื ืืช ืžืขืจื›ืช ื”ื›ืœืœื™ื ื”ืžื—ื™ื™ื‘ื™ื ื”ืžืฆื•ืจืคื™ื ืœื•. ืœืื—ืจ ืžื›ืŸ ื”ื•ื ืงื•ืจื ืืช ื”ื›ืœืœื™ื ื”ืœืœื• ื•ืžืฉื•ื•ื” ืื•ืชื ืœืชื›ื•ื ื•ืช ื”ื–ื”ื•ืช ื”ืžืื•ืžืชื•ืช.
  5. ื˜ื” ื“ื”! ื ืขื‘ื•ืจ ืœืฉืœื‘ 5 ื‘ื”ืกื‘ืจ ื”ืžืขื’ืœ ื”ืงื•ื“ื.

ื”ืคืขืœ ืืช Consul-server ืขืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืจื’ื™ืœื”

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

  • ื”ืคืขืœ ืืช ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช (ืžื•ืคืข/ืฉืจืช).

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

  • ืฆื•ืจ ื›ืœืœ ืขื‘ื•ืจ ื—ื•ืžืช ื”ืืฉ (ืงื‘ื•ืฆืช ืื‘ื˜ื—ื” ื‘-AWS):
  • ืื ื™ ืื•ื”ื‘ ืœื”ืงืฆื•ืช ืืช ืื•ืชื• ืฉื ืžื›ื•ื ื” ื’ื ืœื›ืœืœ ื•ื’ื ืœืชื’ ื”ืจืฉืช, ื‘ืžืงืจื” ื”ื–ื” "skywiz-consul-server-poc".
  • ืžืฆื ืืช ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืžื—ืฉื‘ ื”ืžืงื•ืžื™ ืฉืœืš ื•ื”ื•ืกืฃ ืื•ืชื” ืœืจืฉื™ืžืช ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœ ื”ืžืงื•ืจ ื›ื“ื™ ืฉื ื•ื›ืœ ืœื’ืฉืช ืœืžืžืฉืง ื”ืžืฉืชืžืฉ (UI).
  • ืคืชื— ืืช ื™ืฆื™ืื” 8500 ืขื‘ื•ืจ ืžืžืฉืง ื”ืžืฉืชืžืฉ. ืœื—ืฅ ืขืœ ืฆื•ืจ. ืื ื• ื ืฉื ื” ืืช ื—ื•ืžืช ื”ืืฉ ื”ื–ื• ืฉื•ื‘ ื‘ืงืจื•ื‘ [ืงืฉืจ].
  • ื”ื•ืกืฃ ื›ืœืœ ื—ื•ืžืช ืืฉ ืœืžื•ืคืข. ื—ื–ื•ืจ ืœืœื•ื— ื”ืžื—ื•ื•ื ื™ื ืฉืœ VM ื‘-Consul Server ื•ื”ื•ืกืฃ "skywiz-consul-server-poc" ืœืฉื“ื” ืชื’ื™ ื”ืจืฉืช. ืœื—ืฅ ืขืœ ืฉืžื•ืจ.

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

  • ื”ืชืงืŸ ืืช Consul ืขืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช, ื‘ื“ื•ืง ื›ืืŸ. ื–ื›ื•ืจ ืฉืืชื” ืฆืจื™ืš ื’ื™ืจืกืช Consul โ‰ฅ 1.5 [ืงื™ืฉื•ืจ]
  • ื‘ื•ืื• ื ื™ืฆื•ืจ ืงื•ื ืกื•ืœ ืฆื•ืžืช ื™ื—ื™ื“ - ื”ืชืฆื•ืจื” ื”ื™ื ื›ื“ืœืงืžืŸ.

groupadd --system consul
useradd -s /sbin/nologin --system -g consul consul
mkdir -p /var/lib/consul
chown -R consul:consul /var/lib/consul
chmod -R 775 /var/lib/consul
mkdir /etc/consul.d
chown -R consul:consul /etc/consul.d

  • ืœืžื“ืจื™ืš ืžืคื•ืจื˜ ื™ื•ืชืจ ืขืœ ื”ืชืงื ืช Consul ื•ื”ื’ื“ืจืช ืืฉื›ื•ืœ ืฉืœ 3 ืฆืžืชื™ื, ืจืื” ื›ืืŸ.
  • ืฆื•ืจ ืงื•ื‘ืฅ /etc/consul.d/agent.json ื‘ืื•ืคืŸ ื”ื‘ื [ืงืฉืจ]:

### /etc/consul.d/agent.json
{
 "acl" : {
 "enabled": true,
 "default_policy": "deny",
 "enable_token_persistence": true
 }
}

  • ื”ืคืขืœ ืืช ืฉืจืช ื”ืงื•ื ืกื•ืœ ืฉืœื ื•:

consul agent 
-server 
-ui 
-client 0.0.0.0 
-data-dir=/var/lib/consul 
-bootstrap-expect=1 
-config-dir=/etc/consul.d

  • ืืชื” ืืžื•ืจ ืœืจืื•ืช ื—ื‘ื•ืจื” ืฉืœ ืคืœื˜ ื•ืœืกื™ื™ื ืขื "... ืขื“ื›ื•ืŸ ื—ืกื•ื ืขืœ ื™ื“ื™ ACLs."
  • ืžืฆื ืืช ื›ืชื•ื‘ืช ื”-IP ื”ื—ื™ืฆื•ื ื™ืช ืฉืœ ืฉืจืช ื”-Consul ื•ืคืชื— ื“ืคื“ืคืŸ ืขื ื›ืชื•ื‘ืช ื”-IP ื”ื–ื• ื‘ื™ืฆื™ืื” 8500. ื•ื“ื ืฉื”-UI ื ืคืชื—.
  • ื ืกื” ืœื”ื•ืกื™ืฃ ืฆืžื“ ืžืคืชื—/ืขืจืš. ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ื˜ืขื•ืช. ื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ืฉื”ืขืžืกื ื• ืืช ืฉืจืช ื”-Consul ืขื ACL ื•ื”ืฉื‘ืชื ื• ืืช ื›ืœ ื”ื›ืœืœื™ื.
  • ื—ื–ื•ืจ ืœืžืขื˜ืคืช ืฉืœืš ื‘ืฉืจืช ื”ืงื•ื ืกื•ืœ ื•ื”ืชื—ืœ ืืช ื”ืชื”ืœื™ืš ื‘ืจืงืข ืื• ื‘ื“ืจืš ืื—ืจืช ื›ื“ื™ ืœื”ืคืขื™ืœ ืื•ืชื• ื•ื”ื–ืŸ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

consul acl bootstrap

  • ืžืฆื ืืช ื”ืขืจืš "SecretID" ื•ื—ื–ื•ืจ ืœืžืžืฉืง ื”ืžืฉืชืžืฉ. ื‘ืœืฉื•ื ื™ืช ACL, ื”ื–ืŸ ืืช ื”ืžื–ื”ื” ื”ืกื•ื“ื™ ืฉืœ ื”ืืกื™ืžื•ืŸ ืฉื–ื” ืขืชื” ื”ืขืชืงืช. ื”ืขืชืง ืืช SecretID ืœืžืงื•ื ืื—ืจ, ื ื–ื“ืงืง ืœื• ืžืื•ื—ืจ ื™ื•ืชืจ.
  • ื›ืขืช ื”ื•ืกืฃ ืฆืžื“ ืžืคืชื—/ืขืจืš. ืขื‘ื•ืจ POC ื–ื”, ื”ื•ืกืฃ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื: ืžืคืชื—: "custom-ns/test_key", ืขืจืš: "ืื ื™ ื‘ืชื™ืงื™ื™ื” Custom-ns!"

ื”ืฉืงืช ืืฉื›ื•ืœ Kubernetes ืขื‘ื•ืจ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืขื ืœืงื•ื— ื”ืงื•ื ืกื•ืœ ื›-Daemonset

  • ืฆื•ืจ ืืฉื›ื•ืœ K8s (Kubernetes). ืื ื• ื ื™ืฆื•ืจ ืื•ืชื• ื‘ืื•ืชื• ืื–ื•ืจ ื›ืžื• ื”ืฉืจืช ืœื’ื™ืฉื” ืžื”ื™ืจื” ื™ื•ืชืจ, ื•ื›ืš ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืื•ืชื” ืจืฉืช ืžืฉื ื” ื›ื“ื™ ืœื”ืชื—ื‘ืจ ื‘ืงืœื•ืช ืœื›ืชื•ื‘ื•ืช IP ืคื ื™ืžื™ื•ืช. ืื ื—ื ื• ื ืงืจื ืœื–ื” "skywiz-app-with-consul-client-poc".

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

  • ื›ื”ืขืจื” ืฆื“ื“ื™ืช, ื”ื ื” ืžื“ืจื™ืš ื˜ื•ื‘ ืฉื ืชืงืœืชื™ ื‘ื• ื‘ื–ืžืŸ ื”ืงืžืช ืืฉื›ื•ืœ POC Consul ืขื Consul Connect.
  • ืื ื• ื’ื ื ืฉืชืžืฉ ื‘ืชืจืฉื™ื ื”ื”ื’ื” ืฉืœ Hashicorp ืขื ืงื•ื‘ืฅ ืขืจื›ื™ื ืžื•ืจื—ื‘.
  • ื”ืชืงืŸ ื•ื”ื’ื“ืจ ืืช Helm. ืฉืœื‘ื™ ื”ื’ื“ืจื”:

kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding 
   --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
./helm init --service-account=tiller
./helm update

  • ืชืจืฉื™ื ื”ื’ื”: https://www.consul.io/docs/platform/k8s/helm.html
  • ื”ืฉืชืžืฉ ื‘ืงื•ื‘ืฅ ื”ืขืจื›ื™ื ื”ื‘ื (ืฉื™ื ืœื‘ ืฉื”ืฉื‘ืชืชื™ ืืช ืจื•ื‘):

### poc-helm-consul-values.yaml
global:
 enabled: false
 image: "consul:latest"
# Expose the Consul UI through this LoadBalancer
ui:
 enabled: false
# Allow Consul to inject the Connect proxy into Kubernetes containers
connectInject:
 enabled: false
# Configure a Consul client on Kubernetes nodes. GRPC listener is required for Connect.
client:
 enabled: true
 join: ["<PRIVATE_IP_CONSUL_SERVER>"]
 extraConfig: |
{
  "acl" : {
 "enabled": true,   
 "default_policy": "deny",   
 "enable_token_persistence": true 
  }
}
# Minimal Consul configuration. Not suitable for production.
server:
 enabled: false
# Sync Kubernetes and Consul services
syncCatalog:
 enabled: false

  • ื”ื—ืœ ืืช ืชืจืฉื™ื ื”ื”ื’ื”:

./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc

  • ื›ืืฉืจ ื”ื•ื ืžื ืกื” ืœื”ืคืขื™ืœ, ื”ื•ื ื™ืฆื˜ืจืš ื”ืจืฉืื•ืช ืขื‘ื•ืจ ืฉืจืช ื”-Consul, ืื– ื‘ื•ืื• ื ื•ืกื™ืฃ ืื•ืชืŸ.
  • ืฉื™ื ืœื‘ ืœ-"Pod Address Range" ื”ืžืžื•ืงื ื‘ืœื•ื— ื”ืžื—ื•ื•ื ื™ื ืฉืœ ื”ืืฉื›ื•ืœ ื•ืคื ื” ืืœ ื›ืœืœ ื—ื•ืžืช ื”ืืฉ "skywiz-consul-server-poc" ืฉืœื ื•.
  • ื”ื•ืกืฃ ืืช ื˜ื•ื•ื— ื”ื›ืชื•ื‘ื•ืช ืฉืœ ื”ืคื•ื“ ืœืจืฉื™ืžืช ื›ืชื•ื‘ื•ืช ื”-IP ื•ื”ื™ืฆื™ืื•ืช ื”ืคืชื•ื—ื•ืช 8301 ื•-8300.

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

  • ืขื‘ื•ืจ ืืœ ื”-Consul UI ื•ืœืื—ืจ ืžืกืคืจ ื“ืงื•ืช ืชืจืื” ืืช ื”ืืฉื›ื•ืœ ืฉืœื ื• ืžื•ืคื™ืข ื‘ืœืฉื•ื ื™ืช ื”ืฆืžืชื™ื.

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ื”ื’ื“ืจืช ืฉื™ื˜ืช ื”ืจืฉืื” ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ ืฉืœ Consul ืขื Kubernetes

  • ื—ื–ื•ืจ ืœืžืขื˜ืคืช ื”ืฉืจืช ืฉืœ Consul ื•ื™ื™ืฆื ืืช ื”ืืกื™ืžื•ืŸ ืฉืฉืžืจืช ืงื•ื“ื ืœื›ืŸ:

export CONSUL_HTTP_TOKEN=<SecretID>

  • ื ื–ื“ืงืง ืœืžื™ื“ืข ืžืืฉื›ื•ืœ Kubernetes ืฉืœื ื• ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ืฉื™ื˜ืช ื”ืื™ืžื•ืช:
  • kubernetes-host

kubectl get endpoints | grep kubernetes

  • kubernetes-service-account-jwt

kubectl get sa <helm_deployment_name>-consul-client -o yaml | grep "- name:"
kubectl get secret <secret_name_from_prev_command> -o yaml | grep token:

  • ื”ืืกื™ืžื•ืŸ ืžืงื•ื“ื“ base64, ืื– ืคืขื ื— ืื•ืชื• ื‘ืืžืฆืขื•ืช ื”ื›ืœื™ ื”ืžื•ืขื“ืฃ ืขืœื™ืš [ืงืฉืจ]
  • kubernetes-ca-cert

kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:

  • ืงื— ืืช ื”ืื™ืฉื•ืจ "ca.crt" (ืœืื—ืจ ืคืขื ื•ื— base64) ื•ื›ืชื•ื‘ ืื•ืชื• ืœืงื•ื‘ืฅ "ca.crt".
  • ื›ืขืช ื”ืคืขืœ ืืช ืฉื™ื˜ืช ื”ืื™ืžื•ืช, ื”ื—ืœืฃ ืืช ืžืฆื™ื™ื ื™ ื”ืžื™ืงื•ื ื‘ืขืจื›ื™ื ืฉื–ื” ืขืชื” ืงื™ื‘ืœืช.

consul acl auth-method create 
-type "kubernetes" 
-name "auth-method-skywiz-consul-poc" 
-description "This is an auth method using kubernetes for the cluster skywiz-app-with-consul-client-poc" 
-kubernetes-host "<k8s_endpoint_retrieved earlier>" 
[email protected] 
-kubernetes-service-account-
jwt="<decoded_token_retrieved_earlier>"

  • ื‘ืฉืœื‘ ื”ื‘ื ืขืœื™ื ื• ืœื™ืฆื•ืจ ื›ืœืœ ื•ืœืฆืจืฃ ืื•ืชื• ืœืชืคืงื™ื“ ื”ื—ื“ืฉ. ืขื‘ื•ืจ ื—ืœืง ื–ื” ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-Consul UI, ืื‘ืœ ืื ื—ื ื• ื ืฉืชืžืฉ ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”.
  • ื›ืชื•ื‘ ื›ืœืœ

### kv-custom-ns-policy.hcl
key_prefix "custom-ns/" {
 policy = "write"
}

  • ื”ื—ืœ ืืช ื”ื›ืœืœ

consul acl policy create 
-name kv-custom-ns-policy 
-description "This is an example policy for kv at custom-ns/" 
-rules @kv-custom-ns-policy.hcl

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

consul acl role create 
-name "custom-ns-role" 
-description "This is an example role for custom-ns namespace" 
-policy-id <policy_id>

  • ื›ืขืช ื ืงืฉืจ ืืช ื”ืชืคืงื™ื“ ื”ื—ื“ืฉ ืฉืœื ื• ืœืžื•ืคืข ืฉื™ื˜ืช ื”ืื™ืžื•ืช. ืฉื™ืžื• ืœื‘ ืฉื“ื’ืœ ื”"ื‘ื•ืจืจ" ืงื•ื‘ืข ืื ื‘ืงืฉืช ื”ื”ืชื—ื‘ืจื•ืช ืฉืœื ื• ืชืงื‘ืœ ืืช ื”ืชืคืงื™ื“ ื”ื–ื”. ื‘ื“ื•ืง ื›ืืŸ ืœืืคืฉืจื•ื™ื•ืช ื‘ื•ืจืจ ืื—ืจื•ืช: https://www.consul.io/docs/acl/auth-methods/kubernetes.html#trusted-identity-attributes

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-ns-role' 
-selector='serviceaccount.namespace=="custom-ns"'

ืกื•ืฃ ืกื•ืฃ ืชืฆื•ืจื•ืช

ื’ื™ืฉื” ืœื–ื›ื•ื™ื•ืช

  • ืฆื•ืจ ื–ื›ื•ื™ื•ืช ื’ื™ืฉื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืชืช ืœืงื•ื ืกื•ืœ ืื™ืฉื•ืจ ืœืืžืช ื•ืœื–ื”ื•ืช ืืช ื–ื”ื•ืช ื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ืฉืœ K8s.
  • ื›ืชื•ื‘ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ืœืงื•ื‘ืฅ [ืงื™ืฉื•ืจ]:

###skywiz-poc-consul-server_rbac.yaml
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: review-tokens
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: system:auth-delegator
 apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: service-account-getter
 namespace: default
rules:
- apiGroups: [""]
 resources: ["serviceaccounts"]
 verbs: ["get"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: get-service-accounts
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: service-account-getter
 apiGroup: rbac.authorization.k8s.io

  • ื‘ื•ืื• ื ื™ืฆื•ืจ ื–ื›ื•ื™ื•ืช ื’ื™ืฉื”

kubectl create -f skywiz-poc-consul-server_rbac.yaml

ืžืชื—ื‘ืจ ืœ-Consul Client

  • ื›ืคื™ ืฉืฆื•ื™ืŸ ื›ืืŸื™ืฉื ืŸ ืžืกืคืจ ืืคืฉืจื•ื™ื•ืช ืœื—ื™ื‘ื•ืจ ืœ-demonset, ืืš ื ืขื‘ื•ืจ ืœืคืชืจื•ืŸ ื”ืคืฉื•ื˜ ื”ื‘ื:
  • ื”ื—ืœ ืืช ื”ืงื•ื‘ืฅ ื”ื‘ื [ืงืฉืจ].

### poc-consul-client-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
 name: consul-ds-client
spec:
 selector:
   app: consul
   chart: consul-helm
   component: client
   hasDNS: "true"
   release: skywiz-app-with-consul-client-poc
 ports:
 - protocol: TCP
   port: 80
   targetPort: 8500

  • ืœืื—ืจ ืžื›ืŸ ื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” ื”ืžื•ื‘ื ื™ืช ื”ื‘ืื” ื›ื“ื™ ืœื™ืฆื•ืจ ืžืคืช ืชืฆื•ืจื” [ืงืฉืจ]. ืฉื™ืžื• ืœื‘ ืฉืื ื• ืžืชื™ื™ื—ืกื™ื ืœืฉื ื”ืฉื™ืจื•ืช ืฉืœื ื•, ื”ื—ืœื™ืคื• ืื•ืชื• ื‘ืžื™ื“ืช ื”ืฆื•ืจืš.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
 labels:
   addonmanager.kubernetes.io/mode: EnsureExists
 name: kube-dns
 namespace: kube-system
data:
 stubDomains: |
   {"consul": ["$(kubectl get svc consul-ds-client -o jsonpath='{.spec.clusterIP}')"]}
EOF

ื‘ื“ื™ืงืช ืฉื™ื˜ืช ื”ืื™ืฉื•ืจ

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืจืื” ืืช ื”ืงืกื ื‘ืคืขื•ืœื”!

  • ืฆื•ืจ ืžืกืคืจ ืชื™ืงื™ื•ืช ืžืคืชื— ื ื•ืกืคื•ืช ืขื ืื•ืชื• ืžืคืชื— ื‘ืจืžื” ื”ืขืœื™ื•ื ื” (ื›ืœื•ืžืจ. /sample_key) ื•ืขืจืš ืœื‘ื—ื™ืจืชืš. ืฆื•ืจ ืžื“ื™ื ื™ื•ืช ื•ืชืคืงื™ื“ื™ื ืžืชืื™ืžื™ื ืœื ืชื™ื‘ื™ ืžืคืชื— ื—ื“ืฉื™ื. ืื ื—ื ื• ื ืขืฉื” ืืช ื”ื›ืจื™ื›ื•ืช ืžืื•ื—ืจ ื™ื•ืชืจ.

ื”ื™ื›ืจื•ืช ืขื ื”ืจืฉืืช Kubernetes ืฉืœ Hashicorp Consult

ื‘ื“ื™ืงืช ืžืจื—ื‘ ืฉืžื•ืช ืžื•ืชืื ืื™ืฉื™ืช:

  • ื‘ื•ืื• ื ื™ืฆื•ืจ ืžืจื—ื‘ ืฉืžื•ืช ืžืฉืœื ื•:

kubectl create namespace custom-ns

  • ื‘ื•ืื• ื ื™ืฆื•ืจ ืคื•ื“ ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ื—ื“ืฉ ืฉืœื ื•. ื›ืชื•ื‘ ืืช ื”ืชืฆื•ืจื” ืฉืœ ื”ืคื•ื“.

###poc-ubuntu-custom-ns.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-ns
 namespace: custom-ns
spec:
 containers:
 - name: poc-ubuntu-custom-ns
   image: ubuntu
   command: ["/bin/bash", "-ec", "sleep infinity"]
 restartPolicy: Never

  • ืฆื•ืจ ืชื—ืช:

kubectl create -f poc-ubuntu-custom-ns.yaml

  • ืœืื—ืจ ืฉื”ืžื™ื›ืœ ืคื•ืขืœ, ืขื‘ื•ืจ ืœืฉื ื•ื”ืชืงืŸ ืืช curl.

kubectl exec poc-ubuntu-custom-ns -n custom-ns -it /bin/bash
apt-get update && apt-get install curl -y

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

cat /run/secrets/kubernetes.io/serviceaccount/token

  • ื›ืชื•ื‘ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ืœืงื•ื‘ืฅ ื‘ืชื•ืš ื”ืžื™ื›ืœ:

### payload.json
{
 "AuthMethod": "auth-method-test",
 "BearerToken": "<jwt_token>"
}

  • ื”ืชื—ื‘ืจื•ืช!

curl 
--request POST 
--data @payload.json 
consul-ds-client.default.svc.cluster.local/v1/acl/login

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

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • ืขื•ื‘ื“! ืœืคื—ื•ืช ืฆืจื™ืš. ืขื›ืฉื™ื• ืงื— ืืช ื”-SecretID ื•ื ืกื” ืœื’ืฉืช ืœืžืคืชื—/ืขืจืš ืฉืืžื•ืจ ืœื”ื™ื•ืช ืœื ื• ื’ื™ืฉื” ืืœื™ื•.

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-ns/test_key --header โ€œX-Consul-Token: <SecretID_from_prev_response>โ€

  • ืืชื” ื™ื›ื•ืœ ืœืคืขื ื— ืืช "Value" ื‘-base64 ื•ืœืจืื•ืช ืฉื”ื•ื ืชื•ืื ืืช ื”ืขืจืš ื‘-custom-ns/test_key ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ. ืื ื”ืฉืชืžืฉืช ื‘ืื•ืชื• ืขืจืš ืœืขื™ืœ ื‘ืžื“ืจื™ืš ื–ื”, ื”ืขืจืš ื”ืžืงื•ื“ื“ ืฉืœืš ื™ื”ื™ื” IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.

ื‘ื“ื™ืงืช ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช ืžืฉืชืžืฉ:

  • ืฆื•ืจ ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช ืžื•ืชืื ืื™ืฉื™ืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ื‘ืื” [ืงืฉืจ].

kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
 name: custom-sa
EOF

  • ืฆื•ืจ ืงื•ื‘ืฅ ืชืฆื•ืจื” ื—ื“ืฉ ืขื‘ื•ืจ ื”ืคื•ื“. ืฉื™ืžื• ืœื‘ ืฉื›ืœืœืชื™ ื”ืชืงื ืช ืชืœืชืœื™ื ื›ื“ื™ ืœื—ืกื•ืš ื‘ืขื‘ื•ื“ื” :)

###poc-ubuntu-custom-sa.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-sa
 namespace: default
spec:
 serviceAccountName: custom-sa
 containers:
 - name: poc-ubuntu-custom-sa
   image: ubuntu
   command: ["/bin/bash","-ec"]
   args: ["apt-get update && apt-get install curl -y; sleep infinity"]
 restartPolicy: Never

  • ืœืื—ืจ ืžื›ืŸ, ื”ืคืขืœ ืžืขื˜ืคืช ื‘ืชื•ืš ื”ืžื™ื›ืœ.

kubectl exec -it poc-ubuntu-custom-sa /bin/bash

  • ื”ืชื—ื‘ืจื•ืช!

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • ื”ื”ืจืฉืื” ื ื“ื—ืชื”. ืื”, ืฉื›ื—ื ื• ืœื”ื•ืกื™ืฃ ื›ืœืœื™ื ื—ื“ืฉื™ื ื”ืžื—ื™ื™ื‘ื™ื ืขื ื”ื”ืจืฉืื•ืช ื”ืžืชืื™ืžื•ืช, ื‘ื•ืื• ื ืขืฉื” ืืช ื–ื” ืขื›ืฉื™ื•.

ื—ื–ื•ืจ ืขืœ ื”ืฉืœื‘ื™ื ื”ืงื•ื“ืžื™ื ืœืžืขืœื”:
ื) ืฆื•ืจ ืžื“ื™ื ื™ื•ืช ื–ื”ื” ืขื‘ื•ืจ ื”ืงื™ื“ื•ืžืช "custom-sa/".
ื‘) ืฆื•ืจ ืชืคืงื™ื“, ืงืจื ืœื• "ืชืคืงื™ื“ ืžื•ืชืื ืื™ืฉื™ืช"
ื’) ืฆืจืฃ ืืช ื”ืžื“ื™ื ื™ื•ืช ืœืชืคืงื™ื“.

  • ืฆื•ืจ Rule-Binding (ืืคืฉืจ ืจืง ืž-cli/api). ืฉื™ืžื• ืœื‘ ืœืžืฉืžืขื•ืช ื”ืฉื•ื ื” ืฉืœ ื“ื’ืœ ื”ื‘ื•ืจืจ.

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-sa-role' 
-selector='serviceaccount.name=="custom-sa"'

  • ื”ื™ื›ื ืก ืฉื•ื‘ ืžืžื™ื›ืœ "poc-ubuntu-custom-sa". ื”ึทืฆืœึธื—ึธื”!
  • ื‘ื“ื•ืง ืืช ื”ื’ื™ืฉื” ืฉืœื ื• ืœื ืชื™ื‘ ื”ืžืคืชื— ื”ืžื•ืชืื ืื™ืฉื™ืช.

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-sa/test_key --header โ€œX-Consul-Token: <SecretID>โ€

  • ืืชื” ื™ื›ื•ืœ ื’ื ืœื•ื•ื“ื ืฉื”ืืกื™ืžื•ืŸ ื”ื–ื” ืœื ืžืขื ื™ืง ื’ื™ืฉื” ืœ-kv ื‘-"custom-ns/". ืคืฉื•ื˜ ื—ื–ื•ืจ ืขืœ ื”ืคืงื•ื“ื” ืœืขื™ืœ ืœืื—ืจ ื”ื—ืœืคืช "custom-sa" ื‘ืงื™ื“ื•ืžืช "custom-ns".
    ื”ื”ืจืฉืื” ื ื“ื—ืชื”.

ื“ื•ื’ืžื” ืฉืœ ืฉื›ื‘ืช-ืขืœ:

  • ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉื›ืœ ื”ืžื™ืคื•ื™ื™ื ื”ืžื—ื™ื™ื‘ื™ื ื›ืœืœื™ื ื™ืชื•ื•ืกืคื• ืœืืกื™ืžื•ืŸ ืขื ื”ื–ื›ื•ื™ื•ืช ื”ืœืœื•.
  • ื”ืงื™ื‘ื•ืœ ืฉืœื ื• "poc-ubuntu-custom-sa" ื ืžืฆื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ - ืื– ื‘ื•ืื• ื ืฉืชืžืฉ ื‘ื• ืœืงื‘ื™ืขืช ื›ืœืœื™ื ืื—ืจืช.
  • ื—ื–ื•ืจ ืขืœ ื”ืฉืœื‘ื™ื ื”ืงื•ื“ืžื™ื:
    ื) ืฆื•ืจ ืžื“ื™ื ื™ื•ืช ื–ื”ื” ืขื‘ื•ืจ ืงื™ื“ื•ืžืช ืžืคืชื— "ื‘ืจื™ืจืช ืžื—ื“ืœ/".
    ื‘) ืฆื•ืจ ืชืคืงื™ื“, ืฉื ืœื• "default-ns-role"
    ื’) ืฆืจืฃ ืืช ื”ืžื“ื™ื ื™ื•ืช ืœืชืคืงื™ื“.
  • ืฆื•ืจ ื›ืจื™ื›ืช ื›ืœืœื™ื (ืืคืฉืจื™ ืจืง ืž-cli/api)

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='default-ns-role' 
-selector='serviceaccount.namespace=="default"'

  • ื—ื–ื•ืจ ืœืžื™ื›ืœ "poc-ubuntu-custom-sa" ืฉืœื ื• ื•ื ืกื” ืœื’ืฉืช ืœื ืชื™ื‘ "ื‘ืจื™ืจืช ื”ืžื—ื“ืœ/" kv.
  • ื”ื”ืจืฉืื” ื ื“ื—ืชื”.
    ืืชื” ื™ื›ื•ืœ ืœื”ืฆื™ื’ ืืช ื”ืื™ืฉื•ืจื™ื ืฉืฆื•ื™ื ื• ืขื‘ื•ืจ ื›ืœ ืืกื™ืžื•ืŸ ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ ืชื—ืช ACL > Tokens. ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ืœื˜ื•ืงืŸ ื”ื ื•ื›ื—ื™ ืฉืœื ื• ื™ืฉ ืจืง "ืชืคืงื™ื“ ืžื•ืชืื ืื™ืฉื™ืช" ืื—ื“ ืžื—ื•ื‘ืจ ืืœื™ื•. ื”ืืกื™ืžื•ืŸ ื‘ื• ืื ื• ืžืฉืชืžืฉื™ื ื›ืขืช ื ื•ืฆืจ ื›ืฉื ื›ื ืกื ื• ื•ื”ื™ื™ืชื” ืจืง ืžื—ื™ื™ื‘ ื›ืœืœ ืื—ื“ ืฉื”ืชืื™ื ืื–. ืขืœื™ื ื• ืœื”ืชื—ื‘ืจ ืฉื•ื‘ ื•ืœื”ืฉืชืžืฉ ื‘ืืกื™ืžื•ืŸ ื”ื—ื“ืฉ.
  • ื•ื“ื ืฉืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ื’ื ืžื”ื ืชื™ื‘ื™ื "custom-sa/" ื•ื’ื "ื‘ืจื™ืจืช ืžื—ื“ืœ/" kv.
    ื”ืฆืœื—ื”!
    ื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ืฉื”-"poc-ubuntu-custom-sa" ืฉืœื ื• ืชื•ืื ืืช ื›ืจื™ื›ื•ืช ื”ื›ืœืœื™ื "custom-sa" ื•-"default-ns".

ืžืกืงื ื”

TTL token mgmt?

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

ื™ืฉื ื” ืืคืฉืจื•ืช ืœื™ืฆื•ืจ ืืกื™ืžื•ืŸ ื‘ืื•ืคืŸ ื™ื“ื ื™ ืขื TTL:

ืื ื• ืžืงื•ื•ื™ื ืฉื‘ืขืชื™ื“ ื”ืงืจื•ื‘ ื ื•ื›ืœ ืœืฉืœื•ื˜ ื›ื™ืฆื“ ื ื•ืฆืจื™ื ืืกื™ืžื•ื ื™ื (ืœืคื™ ื›ืœืœ ืื• ืฉื™ื˜ืช ื”ืจืฉืื”) ื•ืœื”ื•ืกื™ืฃ TTL.

ืขื“ ืื–, ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื ืงื•ื“ืช ืงืฆื” ืœื™ืฆื™ืื” ื‘ืœื•ื’ื™ืงื” ืฉืœืš.

ืงืจื ื’ื ืžืืžืจื™ื ืื—ืจื™ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

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

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