αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp 1.5.0 αž“αŸ…αžŠαžΎαž˜αžαŸ‚αž§αžŸαž—αžΆ αž†αŸ’αž“αžΆαŸ† 2019 αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαŸŠαž»αž› αž’αŸ’αž“αž€αž’αžΆαž…αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αžŠαžΎαž˜αž€αŸ†αžŽαžΎαžαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸαžšαŸ€αž“αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž‡αŸ†αž αžΆαž“αŸ— αž—αžΈαž’αžΌαŸ” (Proof of concept, PoC) αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαž“αŸαŸ‡αŸ” αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžšαŸ†αž–αžΉαž„αžαžΆαž“αžΉαž„αž˜αžΆαž“αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž’αŸ†αž–αžΈ Kubernetes αž“αž·αž„ Consul αžšαž”αžŸαŸ‹ HashicorpαŸ” αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ cloud platform αž¬αž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αžœαŸαžŽαžŽαžΆαž˜αž½αž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ Cloud Platform αžšαž”αžŸαŸ‹ Google αŸ”

αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž‘αŸ… αž―αž€αžŸαžΆαžšαž€αž»αž„αžŸαŸŠαž»αž›αž›αžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ”αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αžšαž αŸαžŸαž“αŸƒαž‚αŸ„αž›αž”αŸ†αžŽαž„ αž“αž·αž„αž€αžšαžŽαžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αž€αŸαžŠαžΌαž…αž‡αžΆαž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž“αž·αž„αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž“αŸƒαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαŸ” αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αž•αŸ’αžαž›αŸ‹αž’αž“αž»αžŸαžΆαžŸαž“αŸαž±αŸ’αž™αž’αžΆαž“αžœαžΆαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž˜αŸ’αžαž„αž˜αž»αž“αž–αŸαž›αž”αž“αŸ’αž αž–αŸ’αžšαŸ„αŸ‡αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αž“αŸ’αž™αž›αŸ‹ αž“αž·αž„αž‘αŸ†αž–αžΆαžšαžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ 1: αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž€αž»αž„αžŸαŸŠαž»αž›

αžαŸ„αŸ‡αž…αžΌαž›αž˜αžΎαž› αž―αž€αžŸαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹.

αž”αŸ’αžšαžΆαž€αžŠαžŽαžΆαžŸαŸ‹ αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžŠαžΌαž…β€‹αž‡αžΆβ€‹αž˜αž“αž»αžŸαŸ’αžŸβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž…αž·αžαŸ’αžβ€‹αž›αŸ’αž’β€‹αžŽαžΆβ€‹αž˜αž½αž™ αž’αŸ’αž“αž€β€‹αž˜αžΎαž›β€‹αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αžŽαŸ‚αž“αžΆαŸ†αŸ” αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€... αž’αŸ’αž“αž€αž”αžšαžΆαž‡αŸαž™αŸ” αžœαžΆβ€‹αž€αžΎαžαž‘αžΎαž„αŸ” αžαŸ„αŸ‡αž‡αž½αžŸαž‡αž»αž›αžšαžΏαž„αž“αŸαŸ‡αŸ”

αž˜αž»αž“αž–αŸαž›αž™αžΎαž„αž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž POC αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŸαžΌαž˜αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ 1) αž αžΎαž™αž€αŸ‚αž›αž˜αŸ’αž’αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘αžšαž”αžŸαŸ‹ Kubernetes αŸ”

αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜

αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸαžšαŸ€αž“αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŠαŸ‚αž›αž“αžΉαž„αž‘αžΆαž€αŸ‹αž‘αž„αž‡αžΆαž˜αž½αž™αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž€αž»αž„αžŸαŸŠαž»αž›αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžαŸ‹αž…αŸαŸ‡αžŸαŸ„αŸ‡αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž αž αžΎαž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αž–αžΈαž€αž»αž„αžŸαŸŠαž»αž›αžŸαŸ„/αžαž˜αŸ’αž›αŸƒαž αžΆαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžšαŸ€αž”αžšαžΆαž”αŸ‹αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸαžšαŸ€αž“αž“αŸαŸ‡ αž€αŸαžŠαžΌαž…αž‡αžΆαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αž›αŸ‹αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αžΈ 2αŸ– αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes

αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αžšαž αŸαžŸαŸ– αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžšαžŸαŸ‹αž“αŸ…αž€αŸ’αžšαŸ…αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž”αžΆαž‘ αž‚αžΆαžαŸ‹β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αžœαžΆβ€‹αžαžΆαž˜β€‹αžœαž·αž’αžΈβ€‹αž“αŸαŸ‡ αž“αž·αž„β€‹αž”αŸ‚αž”β€‹αž“αŸ„αŸ‡αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžŠαŸ„αž™αž™αž€αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž€αž»αž„αžŸαŸŠαž»αž› (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ 1) αž αžΎαž™αž’αž“αž»αžœαžαŸ’αž Kubernetes αž‘αŸ…αžœαžΆ αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž›αžΎ (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ 2) αž αžΎαž™αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  1. αž•αžαž“αžΈαž˜αž½αž™αŸ—αž“αžΉαž„αž˜αžΆαž“αž‚αžŽαž“αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆαžŠαŸ‚αž›αž˜αžΆαž“αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ JWT αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžŸαŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™ Kubernetes αŸ” αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸαŸ‡αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ pod αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž•αž„αžŠαŸ‚αžšαŸ”
  2. αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž¬αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž•αž αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž’αžαž·αžαž·αž‡αž“αž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžŸαŸ†αžŽαžΎαž…αžΌαž›αž€αŸαž“αžΉαž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž™αžΎαž„αž•αž„αžŠαŸ‚αžšαŸ” αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž–αž·αžŸαŸαžŸ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αž“αž»αž‰αŸ’αž‰αžΆαž (αž”αŸ’αžšαž—αŸαž‘ Kubernetes) αŸ” αž‡αŸ†αž αžΆαž“αž‘αžΈ 2 αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž“αžΉαž„αž‡αŸ†αž αžΆαž“αž‘αžΈ 1 αž“αŸƒαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž€αž»αž„αžŸαŸŠαž»αž› (αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‘αžΈ 1) αŸ”
  3. αž’αžαž·αžαž·αž‡αž“αž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αž”αž‰αŸ’αž‡αžΌαž“αžŸαŸ†αžŽαžΎαž“αŸαŸ‡αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”
  4. αžœαŸαž‘αž˜αž“αŸ’αž! αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαžŸαŸ†αžŽαžΎ αž”αŸ’αžšαž˜αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž“αŸƒαžŸαŸ†αžŽαžΎ αž“αž·αž„αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž…αŸ’αž”αžΆαž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž˜αž»αž“αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜β€‹αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜β€‹αž˜αž½αž™β€‹αž‘αŸ€αžβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž–αžΈβ€‹αžšαžΏαž„β€‹αž“αŸαŸ‡αŸ” αž‡αŸ†αž αžΆαž“αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž“αžΉαž„αž‡αŸ†αž αžΆαž“αž‘αžΈ 3, 4 αž“αž·αž„ 5 αž“αŸƒαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž€αž»αž„αžŸαŸŠαž»αž› (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ 1) αŸ”
  5. αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž€αž»αž„αžŸαŸŠαž»αž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αž…αŸ’αž”αžΆαž”αŸ‹αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„ (αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹) αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŸαŸ’αž“αžΎαžŸαž»αŸ†αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž“αžΉαž„αž”αž‰αŸ’αž‡αžΌαž“αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ„αŸ‡αž˜αž€αžœαž·αž‰αŸ” αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž“αžΉαž„αž‡αŸ†αž αžΆαž“αž‘αžΈ 6 αž“αŸƒαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž€αž»αž„αžŸαŸŠαž»αž› (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αžΈ 1) αŸ”
  6. αž’αžαž·αžαž·αž‡αž“αž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αž‰αŸ’αž‡αžΌαž“αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž¬αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžŸαŸ’αž“αžΎαžŸαž»αŸ†αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž¬αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αžΆαž…αž”αŸ’αžšαžΎαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž€αž»αž„αžŸαŸŠαž»αž›αž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ”

αžœαŸαž‘αž˜αž“αŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰!

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αžŸαž”αŸ’αž”αžΆαž™β€‹αž…αž·αžαŸ’αžβ€‹αžŠαŸ„αž™β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž‘αž“αŸ’αžŸαžΆαž™β€‹αž…αŸαž‰β€‹αž˜αž½αž€ αž αžΎαž™β€‹αž…αž„αŸ‹β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αžœαžΆβ€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αž™αŸ‰αžΆαž„β€‹αžŽαžΆ... αž²αŸ’αž™β€‹αžαŸ’αž‰αž»αŸ†β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αžŸαŸŠαžΈβ€‹αž‡αž˜αŸ’αžšαŸ…β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαžΆαŸ” αžšαž“αŸ’αž’αž‘αž“αŸ’αžŸαžΆαž™"αŸ”

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αž–αžΈαž˜αž»αž“ αž‡αŸ†αž αžΆαž“ "αžœαŸαž‘αž˜αž“αŸ’αž" αžšαž”αžŸαŸ‹αž™αžΎαž„ (αžšαžΌαž”αž—αžΆαž–αž‘αžΈ 2: αž‡αŸ†αž αžΆαž“αž‘αžΈ 4) αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžŸαŸ†αžŽαžΎ αž”αŸ’αžšαž˜αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαžŸαŸ†αžŽαžΎ αž“αž·αž„αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžœαžΆαž‘αŸ…αž“αžΉαž„αž…αŸ’αž”αžΆαž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž˜αž»αž“αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αŸ” αž‡αŸ†αž αžΆαž“αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž“αžΉαž„αž‡αŸ†αž αžΆαž“αž‘αžΈ 3, 4 αž“αž·αž„ 5 αž“αŸƒαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ…αž€αž»αž„αžŸαŸŠαž»αž› (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ 1) αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‡αžΆαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ (αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αžΈαŸ£) αž‚αŸ„αž›αž”αŸ†αžŽαž„αž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„ αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αŸ’αžšαžŽαžΆαžαŸ‹ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž‘αžΈ αŸ£αŸ– αžœαŸαž‘αž˜αž“αŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰!

  1. αž‡αžΆαž…αŸ†αžŽαž»αž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž’αžαž·αžαž·αž‡αž“αž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αž‰αŸ’αž‡αžΌαž“αžŸαŸ†αžŽαžΎαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž‚αžŽαž“αžΈ Kubernetes αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž˜αž»αž“αž“αŸαŸ‡αŸ” αž‡αŸ†αž αžΆαž“αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž‡αŸ†αž αžΆαž“αž‘αžΈ 3 αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž’αŸ†αž–αžΈαžŸαŸ€αž‚αŸ’αžœαžΈαž˜αž»αž“αŸ”
  2. αž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž› (αž¬αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†) αžαŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžœαžΆαž“αžΉαž„αž–αž·αž‚αŸ’αžšαŸ„αŸ‡αž‡αžΆαž˜αž½αž™αž€αŸ’αžšαž»αž˜ Kubernetes (αžαžΆαž˜αžšαž™αŸˆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž€αž»αž„αžŸαŸŠαž»αž›) αž αžΎαž™αžŠαŸ„αž™αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŸαž˜αžšαž˜αŸ’αž™ αž™αžΎαž„αž“αžΉαž„αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αžαžΆαžαžΎαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž“αŸ„αŸ‡αž‡αžΆαžšαž”αžŸαŸ‹αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠ αž“αž·αž„αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŽαžΆαŸ”
  3. αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŸαŸ†αžŽαžΎαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž»αž–αž›αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž‚αž›αŸ‹αž‡αžΌαž“αž”αŸ’αžšαž’αžΆαž“αž€αž»αž„αžŸαŸŠαž»αž› αž αžΎαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αžšαž€αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΈαž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ†αž…αžΌαž› (αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘ Kubernetes)αŸ”
  4. αž˜αŸαžŠαžΉαž€αž“αžΆαŸ†αž€αž»αž„αžŸαŸŠαž»αž›αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžšαž€αžƒαžΎαž‰) αž αžΎαž™αž’αžΆαž“αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž…αŸ’αž”αžΆαž”αŸ‹αž…αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž’αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž αžΎαž™αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž–αž½αž€αžœαžΆαž‘αŸ…αž“αžΉαž„αž›αž€αŸ’αžαžŽαŸˆαž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αŸ”
  5. តអ-ដអ! αž…αžΌαžšαž”αž“αŸ’αžαž‘αŸ…αž‡αŸ†αž αžΆαž“αž‘αžΈ 5 αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž’αŸ†αž–αžΈαžŸαŸ€αž‚αŸ’αžœαžΈαž˜αž»αž“αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Consul-server αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž’αž˜αŸ’αž˜αžαžΆαŸ”

αž…αžΆαž”αŸ‹αž–αžΈαž–αŸαž›αž“αŸαŸ‡αžαž‘αŸ… αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž POC αž“αŸαŸ‡ αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž…αŸ†αžŽαž»αž… αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž–αŸαž‰αž›αŸαž‰αŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž–αžΈαž˜αž»αž“ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΎ GCP αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αžŸαŸαž„αŸ”

  • αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž (αž§αž‘αžΆαž αžšαžŽαŸ/αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ)αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

  • αž”αž„αŸ’αž€αžΎαžαž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„ (αž€αŸ’αžšαž»αž˜αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž€αŸ’αž“αž»αž„ AWS)αŸ–
  • αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αžαž€αŸ†αžŽαžαŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž…αŸ’αž”αžΆαž”αŸ‹ αž“αž·αž„αžŸαŸ’αž›αžΆαž€αž”αžŽαŸ’αžαžΆαž‰ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ "skywiz-consul-server-poc" αŸ”
  • αžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžšαž”αžŸαŸ‹αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž”αŸ’αžšαž—αž– αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ (UI) αŸ”
  • αž”αžΎαž€αž…αŸ’αžšαž€ 8500 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ UI αŸ” αž…αž»αž…αž”αž„αŸ’αž€αžΎαžαŸ” αž™αžΎαž„αž“αžΉαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αž“αŸαŸ‡αž˜αŸ’αžαž„αž‘αŸ€αžαž€αŸ’αž“αž»αž„αž–αŸαž›αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡ [αžαŸ†αžŽ].
  • αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αž‘αŸ…αžœαžαŸ’αžαž»αŸ” αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ VM αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž› αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜ "skywiz-consul-server-poc" αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž›αžŸαŸ’αž›αžΆαž€αž”αžŽαŸ’αžαžΆαž‰αŸ” αž…αž»αž…αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

  • αžŠαŸ†αž‘αžΎαž„αž€αž»αž„αžŸαŸŠαž»αž›αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ” αž…αž„αž…αžΆαŸ†αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αŸ†αžŽαŸ‚αž€αž»αž„αžŸαŸŠαž»αž›β‰₯ 1.5 [αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹]
  • αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαž Node Consul αžαŸ‚αž˜αž½αž™ - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

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

  • αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αž»αž„αžŸαŸŠαž»αž› αž“αž·αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž…αž„αŸ’αž€αŸ„αž˜αž“αŸƒ 3 nodes αžŸαžΌαž˜αž˜αžΎαž› αž“αŸ…αž‘αžΈαž“αŸαŸ‡.
  • αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš /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 αžαžΆαž„αž€αŸ’αžšαŸ…αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž› αž αžΎαž™αž”αžΎαž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž“αŸαŸ‡αž“αŸ…αž›αžΎαž…αŸ’αžšαž€ 8500αŸ” αžŸαžΌαž˜αž”αŸ’αžšαžΆαž€αžŠαžαžΆ UI αž”αžΎαž€αŸ”
  • αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž“αŸ’αžαŸ‚αž˜αž‚αžΌαžŸαŸ„/αžαž˜αŸ’αž›αŸƒαŸ” αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ” αž“αŸαŸ‡αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž‘αž»αž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αž‡αžΆαž˜αž½αž™ ACL αž αžΎαž™αž”αžΆαž“αž”αž·αž‘αž…αŸ’αž”αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  • αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αžŸαŸ‚αž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž› αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™ αž¬αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

consul acl bootstrap

  • αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαž˜αŸ’αž›αŸƒ "SecretID" αž αžΎαž™αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ… UI αžœαž·αž‰αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„ ACL αžŸαžΌαž˜αž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸƒαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž’αŸ’αž“αž€αž‘αžΎαž”αžαŸ‚αž…αž˜αŸ’αž›αž„αŸ” αž…αž˜αŸ’αž›αž„ SecretID αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αžŸαŸαž„ αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αŸ”
  • αž₯αž‘αžΌαžœαž“αŸαŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž‚αžΌαžŸαŸ„/αžαž˜αŸ’αž›αŸƒαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ POC αž“αŸαŸ‡ αžŸαžΌαž˜αž”αž“αŸ’αžαŸ‚αž˜αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ– αž‚αž“αŸ’αž›αžΉαŸ‡αŸ– β€œcustom-ns/test_key” αžαž˜αŸ’αž›αŸƒαŸ– β€œαžαŸ’αž‰αž»αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αžαž custom-ns!”

αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αžšαž»αž˜ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžαž·αžαž·αž‡αž“ Consul αž‡αžΆ Daemonset

  • αž”αž„αŸ’αž€αžΎαžαž…αž„αŸ’αž€αŸ„αž˜ K8s (Kubernetes) αŸ” αž™αžΎαž„β€‹αž“αžΉαž„β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžœαžΆβ€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αžαŸ†αž”αž“αŸ‹β€‹αžŠαžΌαž…β€‹αž‚αŸ’αž“αžΆβ€‹αž“αžΉαž„β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž˜αŸβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αž…αžΌαž›β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž›αžΏαž“β€‹αž‡αžΆαž„β€‹αž˜αž»αž“ αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž αžΎαž™β€‹αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž”αŸ’αžšαžΎβ€‹αž”αžŽαŸ’αžŠαžΆαž‰β€‹αžšαž„β€‹αžŠαžΌαž…αž‚αŸ’αž“αžΆβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž„αžΆαž™αžŸαŸ’αžšαž½αž›β€‹αž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž‡αžΆαž˜αž½αž™β€‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžαžΆαž„αž€αŸ’αž“αž»αž„αŸ” αž™αžΎαž„αž“αžΉαž„αž αŸ…αžœαžΆαžαžΆ "skywiz-app-with-consul-client-poc" αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

  • αž‡αžΆαž€αžΆαžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αžŠαŸαž›αŸ’αž’αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž“αŸ…αž–αŸαž›αžšαŸ€αž”αž…αŸ†αž€αŸ’αžšαž»αž˜αž€αž»αž„αžŸαŸŠαž»αž› POC αž‡αžΆαž˜αž½αž™αž€αž»αž„αžŸαŸŠαž»αž› 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

  • αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αž”αž“αŸ’αžαŸ‚αž˜αž–αž½αž€αžœαžΆαŸ”
  • αž…αŸ†αžŽαžΆαŸ† "αž‡αž½αžšαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ Pod" αžŠαŸ‚αž›αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž›αžΎαž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž…αž„αŸ’αž€αŸ„αž˜ αž αžΎαž™αž™αŸ„αž„αž‘αŸ…αž…αŸ’αž”αžΆαž”αŸ‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„ "skywiz-consul-server-poc" αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”
  • αž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αžαž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž“αž·αž„αž…αŸ’αžšαž€αž”αžΎαž€ 8301 αž“αž·αž„ 8300αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

  • αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ Consul UI αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αžΈαžšαž”αžΈαž“αžΆαž‘αžΈαž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αž…αž„αŸ’αž€αŸ„αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž›αŸαž…αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„αžαŸ’αž“αžΆαŸ†αž„αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž Kubernetes αžšαž”αžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž› Hashicorp

αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αž»αž„αžŸαŸŠαž»αž›αž‡αžΆαž˜αž½αž™ Kubernetes

  • αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ… Consul server shell αž αžΎαž™αž“αžΆαŸ†αž…αŸαž‰ token αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž˜αž»αž“αž“αŸαŸ‡αŸ–

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

αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž’αžαž·αžαž·αž‡αž“αž€αž»αž„αžŸαŸŠαž»αž›

  • αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… daemonset αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž”αž“αŸ’αžαž‘αŸ…αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–
  • αž’αž“αž»αžœαžαŸ’αžαž―αž€αžŸαžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ [αžαŸ†αžŽ].

### 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

  • αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ builtin αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž configmap [αžαŸ†αžŽ] αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆαž™αžΎαž„αž€αŸ†αž–αž»αž„αžŸαŸ†αžŠαŸ…αž›αžΎαžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„ αž‡αŸ†αž“αž½αžŸαžœαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”

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

αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž›αŸ†αž αžˆαŸ’αž˜αŸ„αŸ‡αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αŸ–

  • αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαžˆαŸ’αž˜αŸ„αŸ‡αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

kubectl create namespace custom-ns

  • αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž•αžαž“αŸ…αž€αŸ’αž“αž»αž„ namespace αžαŸ’αž˜αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžŸαžšαžŸαŸαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αžαŸ”

###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>”

  • αž’αŸ’αž“αž€αž’αžΆαž…αžŒαž·αž€αžΌαžŠ "αžαž˜αŸ’αž›αŸƒ" base64 αž αžΎαž™αžƒαžΎαž‰αžαžΆαžœαžΆαžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αžαž˜αŸ’αž›αŸƒαž“αŸ…αž€αŸ’αž“αž»αž„ custom-ns/test_key αž€αŸ’αž“αž»αž„ UI αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αž”αŸ’αžšαžΎαžαž˜αŸ’αž›αŸƒαžŠαžΌαž…αž‚αŸ’αž“αžΆαžαžΆαž„αž›αžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸαžšαŸ€αž“αž“αŸαŸ‡ αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž”αžΆαž“αž’αŸŠαž·αž“αž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž‡αžΆ IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi αŸ”

αžαŸαžŸαŸ’αžαž‚αžŽαž“αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

  • αž”αž„αŸ’αž€αžΎαžαž‚αžŽαž“αžΈ ServiceAccount αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ [αžαŸ†αžŽ].

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

  • αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αžαŸ” αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ curl αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž“αŸ’αžŸαŸ†αž€αž˜αŸ’αž›αžΆαŸ†αž„αž–αž›αž€αž˜αŸ’αž˜ :)

###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" αŸ” αž‡αŸ„αž‚αž‡αŸαž™!
  • αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž…αžΌαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž›αžΌαžœαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“-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"
    αž‚) αž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž‘αŸ…αž“αžΉαž„αžαž½αž“αžΆαž‘αžΈαŸ”
  • αž”αž„αŸ’αž€αžΎαž Rule-Binding (αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžαŸ‚αž–αžΈ 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" αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž–αŸ’αž™αžΆαž™αžΆαž˜αž…αžΌαž›αž”αŸ’αžšαžΎαž•αŸ’αž›αžΌαžœ "default/" kv αŸ”
  • αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αŸ”
    αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž–αŸαžαŸŒαž˜αžΆαž“αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ UI αž“αŸ…αž€αŸ’αžšαŸ„αž˜ ACL > TokensαŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“ "αžαž½αž“αžΆαž‘αžΈαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“" αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆαŸ” αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž–αŸαž›αž™αžΎαž„αž…αžΌαž› αž αžΎαž™αž˜αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αž…αž„αžαŸ‚αž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž“αžΉαž„αž–αŸαž›αž“αŸ„αŸ‡αŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαž…αžΌαž›αž˜αŸ’αžαž„αž‘αŸ€αž αž αžΎαž™αž”αŸ’αžšαžΎαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αž˜αžΈαŸ”
  • αžŸαžΌαž˜αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αžΆαž“αž‘αžΆαŸ†αž„αž•αŸ’αž›αžΌαžœ "custom-sa/" αž“αž·αž„ "default/" kvαŸ”
    αž‡αŸ„αž‚αž‡αŸαž™!
    αž“αŸαŸ‡αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ β€œpoc-ubuntu-custom-sa” αžšαž”αžŸαŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αž€αžΆαžšαž…αž„αž…αŸ’αž”αžΆαž”αŸ‹ β€œcustom-sa” αž“αž·αž„ β€œdefault-nsβ€αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹ TTL mgmt?

αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžšαž“αŸαŸ‡ αž˜αž·αž“αž˜αžΆαž“αžœαž·αž’αžΈαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹ TTL αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž“αŸαŸ‡αž‘αŸαŸ” αžœαžΆαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž±αž€αžΆαžŸαžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž€αž»αž„αžŸαŸŠαž»αž›αŸ”

αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŠαŸ„αž™αžŠαŸƒαž‡αžΆαž˜αž½αž™ TTLαŸ–

  • https://www.consul.io/docs/acl/acl-system.html#acl-tokens
    αž–αŸαž›αžœαŸαž›αžΆαž•αž»αžαž€αŸ†αžŽαžαŸ‹ - αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž αžΌαžαŸ” (αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž αž”αž“αŸ’αžαŸ‚αž˜αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαŸŠαž»αž› 1.5.0)
  • αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž/αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŠαŸ„αž™αžŠαŸƒαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” https://www.consul.io/api/acl/tokens.html#expirationtime

αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαžŠαŸαžαŸ’αž›αžΈαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž (αžαžΆαž˜αžœαž·αž’αžΆαž“ αž¬αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž) αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜ TTL αŸ”

αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸ„αŸ‡ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αž“αžΎαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž€αžΆαžšαž…αžΆαž€αž…αŸαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αžŸαžΌαž˜αž’αžΆαž“αž’αžαŸ’αžαž”αž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αž•αž„αžŠαŸ‚αžšαŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹