ãããªãã§ãããªãªãŒã¹åŸã¯
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã段éçã«äœæããŠãããŸã
ÐбзПÑ
è¡ã£ãã
å³ 1: é äºèªèšŒæ¹æ³ã®å ¬åŒæŠèŠ
èŠããŠã¿ãŸããã
確ãã«ã圹ç«ã€æ å ±ã¯ãããŸããããããå®éã«äœ¿çšããæ¹æ³ã«é¢ããã¬ã€ãã¯ãããŸããã ãããã£ãŠãæ£æ°ã®äººãªã誰ã§ãåãããã«ãã€ã³ã¿ãŒãããã§æéãæ¢ããŸãã ãããŠ...倱æããŸãã ããã¯èµ·ãããŸãã ãããä¿®æ£ããŸãããã
POC ã®äœæã«é²ãåã«ãConsul ã®èªèšŒæ¹æ³ã®æŠèŠ (å³ 1) ã«æ»ããKubernetes ã®ã³ã³ããã¹ãã§æŽç·ŽãããŠã¿ãŸãããã
ã¢ãŒããã¯ãã£
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãConsul ã¯ã©ã€ã¢ã³ããã€ã³ã¹ããŒã«ãããŠãã Kubernetes ã¯ã©ã¹ã¿ãŒãšéä¿¡ããå¥ã®ãã·ã³ã« Consul ãµãŒããŒãäœæããŸãã 次ã«ããããå ã«ãã㌠ã¢ããªã±ãŒã·ã§ã³ãäœæããæ§æãããèªèšŒã¡ãœããã䜿çšã㊠Consul ããŒ/å€ã¹ãã¢ããèªã¿åããŸãã
以äžã®å³ã¯ããã®ãã¥ãŒããªã¢ã«ã§äœæããŠããã¢ãŒããã¯ãã£ãšãåŸã§èª¬æããèªèšŒæ¹æ³ã®èåŸã«ããããžãã¯ã詳ãã瀺ããŠããŸãã
å³ 2: Kubernetes èªèšŒæ¹æ³ã®æŠèŠ
ç°¡åãªã¡ã¢: ãããæ©èœããããã«ãConsul ãµãŒããŒã Kubernetes ã¯ã©ã¹ã¿ãŒã®å€ã«ååšããå¿ èŠã¯ãããŸããã ããããã¯ãã圌ã¯ãããªããšããããªããšãã§ããã®ã§ãã
ãããã£ãŠãConsul ã®æŠèŠå³ (å³ 1) ã« Kubernetes ãé©çšãããšãäžã®å³ (å³ 2) ãåŸãããŸããããã§ã®ããžãã¯ã¯æ¬¡ã®ãšããã§ãã
- åãããã«ã¯ãçæãã㊠Kubernetes ã«ãã£ãŠèªèããã JWT ããŒã¯ã³ãå«ããµãŒãã¹ ã¢ã«ãŠã³ããã¢ã¿ãããããŸãã ãã®ããŒã¯ã³ã¯ããã©ã«ãã§ãããã«ãæ¿å ¥ãããŸãã
- ãããå ã®ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã¯ãConsul ã¯ã©ã€ã¢ã³ããžã®ãã°ã€ã³ ã³ãã³ããéå§ããŸãã ãã°ã€ã³ãªã¯ãšã¹ãã«ã¯ããŒã¯ã³ãšååãå«ãŸããŸã ç¹å¥ã«äœããã èªèšŒæ¹åŒïŒKubernetesã¿ã€ãïŒã ãã®ã¹ããã #2 ã¯ãConsul ãã€ã¢ã°ã©ã (ã¹ããŒã 1) ã®ã¹ããã 1 ã«å¯Ÿå¿ããŸãã
- Consul ã¯ã©ã€ã¢ã³ãã¯ããã®ãªã¯ãšã¹ãã Consul ãµãŒããŒã«è»¢éããŸãã
- éæ³ïŒ ããã§ãConsul ãµãŒããŒã¯ãªã¯ãšã¹ãã®ä¿¡é Œæ§ãæ€èšŒãããªã¯ãšã¹ãã® ID ã«é¢ããæ å ±ãåéãããããé¢é£ããäºåå®çŸ©ãããã«ãŒã«ãšæ¯èŒããŸãã 以äžã¯ããã説æããå¥ã®å³ã§ãã ãã®ã¹ãããã¯ãConsul ã®æŠèŠå³ (å³ 3) ã®ã¹ããã 4ã5ãããã³ 1 ã«å¯Ÿå¿ããŸãã
- Consul ãµãŒããŒã¯ãèŠæ±è ã® ID ã«é¢ããŠæå®ãããèªå¯æ¹æ³ã«ãŒã« (å®çŸ©æžã¿) ã«åŸã£ãæš©éãæ〠Consul ããŒã¯ã³ãçæããŸãã ãã®åŸããã®ããŒã¯ã³ãéãè¿ãããŸãã ããã¯ãConsul ã®å³ (å³ 6) ã®ã¹ããã 1 ã«å¯Ÿå¿ããŸãã
- Consul ã¯ã©ã€ã¢ã³ãã¯ãèŠæ±å ã®ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã«ããŒã¯ã³ã転éããŸãã
ããã§ãã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã¯ãããŒã¯ã³ã®æš©éã«ãã£ãŠæ±ºå®ãããããã«ããã® Consul ããŒã¯ã³ã䜿çšã㊠Consul ããŒã¿ãšéä¿¡ã§ããããã«ãªããŸãã
éæ³ãæããããïŒ
åžœåãããŠãµã®ãåºãŠããã ãã§ã¯æºè¶³ã§ããããããã©ã®ããã«æ©èœããããç¥ããã人ã®ããã«...ããã®å¥¥æ·±ããæããŠãã ããã ãŠãµã®ã®å·£ç©Ž'ã
åè¿°ããããã«ããéæ³ã®ãã¹ããã (å³ 2: ã¹ããã 4) ã§ã¯ãConsul ãµãŒããŒããªã¯ãšã¹ããèªèšŒãããªã¯ãšã¹ãã«é¢ããæ å ±ãåéããé¢é£ããäºåå®çŸ©ãããã«ãŒã«ãšæ¯èŒããŸãã ãã®ã¹ãããã¯ãConsul ã®æŠèŠå³ (å³ 3) ã®ã¹ããã 4ã5ãããã³ 1 ã«å¯Ÿå¿ããŸãã 以äžã®å³ (å³ 3) ã¯ãå®éã«äœãèµ·ãã£ãŠããããæ確ã«ç€ºãããšãç®çãšããŠããŸãã ããŒãã®äž ç¹å®ã® Kubernetes èªèšŒæ¹æ³ã
å³ 3: éæ³ãæããã«ãªããŸãã
- ãŸããConsul ã¯ã©ã€ã¢ã³ãã¯ãKubernetes ã¢ã«ãŠã³ã ããŒã¯ã³ãšãåã«äœæããèªèšŒã¡ãœããã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹åã䜿çšããŠããã°ã€ã³ ãªã¯ãšã¹ãã Consul ãµãŒããŒã«è»¢éããŸãã ãã®ã¹ãããã¯ãåã®å路説æã®ã¹ããã 3 ã«å¯Ÿå¿ããŸãã
- ããã§ãConsul ãµãŒã㌠(ãŸãã¯ãªãŒããŒ) ã¯ãåä¿¡ããããŒã¯ã³ã®ä¿¡é Œæ§ãæ€èšŒããå¿ èŠããããŸãã ãããã£ãŠã(Consul ã¯ã©ã€ã¢ã³ãçµç±ã§) Kubernetes ã¯ã©ã¹ã¿ãŒãåç §ããé©åãªæš©éã䜿çšããŠãããŒã¯ã³ãæ¬ç©ãã©ãããããã³ããŒã¯ã³ã誰ã«å±ããŠãããã調ã¹ãŸãã
- æ€èšŒããããªã¯ãšã¹ã㯠Consul ãªãŒããŒã«è¿ãããConsul ãµãŒããŒã¯ãã°ã€ã³ ãªã¯ãšã¹ã (ããã³ Kubernetes ã¿ã€ã) ããæå®ãããååã®èªå¯ã¡ãœãã ã€ã³ã¹ã¿ã³ã¹ãæ€çŽ¢ããŸãã
- é äºãªãŒããŒã¯ãæå®ãããæ¿èªã¡ãœãã ã€ã³ã¹ã¿ã³ã¹ (èŠã€ãã£ãå Žå) ãèå¥ããããã«ä»å ãããŠãããã€ã³ãã£ã³ã° ã«ãŒã«ã®ã»ãããèªã¿åããŸãã 次ã«ããããã®ã«ãŒã«ãèªã¿åããæ€èšŒæžã¿ã® ID å±æ§ãšæ¯èŒããŸãã
- ããã ãŒïŒ å ã»ã©ã®å路説æã®ã¹ããã5ã«é²ã¿ãŸãã
éåžžã®ä»®æ³ãã·ã³äžã§ Consul-server ãå®è¡ãã
ããããã¯ããã® POC ã®äœææ¹æ³ã«ã€ããŠãå šæã®èª¬æã¯ããã«ãå€ãã®å Žåç®æ¡æžãã§èª¬æããŸãã ãŸããåè¿°ããããã«ããã¹ãŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®äœæã« GCP ã䜿çšããŸãããåãã€ã³ãã©ã¹ãã©ã¯ãã£ãä»ã®å Žæã«äœæããããšãã§ããŸãã
- ä»®æ³ãã·ã³ (ã€ã³ã¹ã¿ã³ã¹/ãµãŒããŒ) ãèµ·åããŸãã
- ãã¡ã€ã¢ãŠã©ãŒã«ã®ã«ãŒã« (AWS ã®ã»ãã¥ãªã㣠ã°ã«ãŒã) ãäœæããŸãã
- ç§ã¯ã«ãŒã«ãšãããã¯ãŒã¯ ã¿ã°ã®äž¡æ¹ã«åããã·ã³åãå²ãåœãŠãããšã奜ã¿ãŸãããã®å Žåã¯ãskywiz-consul-server-pocãã§ãã
- ããŒã«ã« ã³ã³ãã¥ãŒã¿ãŒã® IP ã¢ãã¬ã¹ãèŠã€ããŠéä¿¡å IP ã¢ãã¬ã¹ã®ãªã¹ãã«è¿œå ãããšããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ (UI) ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
- UI çšã«ããŒã 8500 ãéããŸãã ãäœæããã¯ãªãã¯ããŸãã ãã®ãã¡ã€ã¢ãŠã©ãŒã«ã¯è¿ã
ãŸãå€æŽããäºå®ã§ã [
ãªã³ã¯ ]. - ãã¡ã€ã¢ãŠã©ãŒã« ã«ãŒã«ãã€ã³ã¹ã¿ã³ã¹ã«è¿œå ããŸãã Consul Server ã® VM ããã·ã¥ããŒãã«æ»ãããããã¯ãŒã¯ ã¿ã° ãã£ãŒã«ãã«ãskywiz-consul-server-pocããè¿œå ããŸãã ãä¿åããã¯ãªãã¯ããŸãã
- Consul ãä»®æ³ãã·ã³ã«ã€ã³ã¹ããŒã«ããŸããããã確èªããŠãã ããã Consul ããŒãžã§ã³ 1.5 以äžãå¿ èŠã§ããããšã«æ³šæããŠãã ãã [ãªã³ã¯]
- åäžããŒãã® 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
- Consul ã®ã€ã³ã¹ããŒã«ãš 3 ããŒãã®ã¯ã©ã¹ã¿ãŒã®ã»ããã¢ããã«é¢ãã詳现ãªã¬ã€ãã«ã€ããŠã¯ã次ãåç
§ããŠãã ããã
ãã㧠. - 次ã®ããã«ãã¡ã€ã« /etc/consul.d/agent.json ãäœæããŸã [
ãªã³ã¯ ]:
### /etc/consul.d/agent.json
{
"acl" : {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true
}
}
- Consul ãµãŒããŒãèµ·åããŸãã
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
- 倧éã®åºåã衚瀺ãããæåŸã«ã...æŽæ°ã ACL ã«ãã£ãŠãããã¯ãããŸãããããšããã¡ãã»ãŒãžã衚瀺ãããã¯ãã§ãã
- Consul ãµãŒããŒã®å€éš IP ã¢ãã¬ã¹ãèŠã€ããŠãããŒã 8500 ã§ãã® IP ã¢ãã¬ã¹ã䜿çšããŠãã©ãŠã¶ãéããŸããUI ãéãããšã確èªããŸãã
- ããŒãšå€ã®ãã¢ãè¿œå ããŠã¿ãŠãã ããã 絶察ééã£ãŠãŸãã ããã¯ãConsul ãµãŒããŒã« ACL ãããŒããããã¹ãŠã®ã«ãŒã«ãç¡å¹ã«ããããã§ãã
- Consul ãµãŒããŒäžã®ã·ã§ã«ã«æ»ããããã¯ã°ã©ãŠã³ãã§ããã»ã¹ãéå§ããããä»ã®æ¹æ³ã§ããã»ã¹ãå®è¡ãã次ã®ããã«å ¥åããŸãã
consul acl bootstrap
- ãSecretIDãå€ãèŠã€ããŠãUI ã«æ»ããŸãã [ACL] ã¿ãã«ãã³ããŒããããŒã¯ã³ã®ã·ãŒã¯ã¬ãã ID ãå ¥åããŸãã SecretID ãå¥ã®å Žæã«ã³ããŒããŸããåŸã§å¿ èŠã«ãªããŸãã
- 次ã«ãããŒãšå€ã®ãã¢ãè¿œå ããŸãã ãã® POC ã§ã¯ã次ãè¿œå ããŸã: ããŒ: ãcustom-ns/test_keyããå€: ãI'm in thecustom-ns ãã©ã«ããŒ!ã
Consul ã¯ã©ã€ã¢ã³ãã Daemonset ãšããŠäœ¿çšããŠã¢ããªã±ãŒã·ã§ã³ã® Kubernetes ã¯ã©ã¹ã¿ãŒãèµ·åãã
- K8s (Kubernetes) ã¯ã©ã¹ã¿ãŒãäœæããŸãã ã¢ã¯ã»ã¹ãé«éåããããã«ãµãŒããŒãšåããŸãŒã³ã«äœæããã®ã§ãåããµããããã䜿çšããŠå éš IP ã¢ãã¬ã¹ã«ç°¡åã«æ¥ç¶ã§ããŸãã ããããskywiz-app-with-consul-client-pocããšåŒã³ãŸãã
- äœè«ã§ãããConsul Connect ã䜿çšã㊠POC Consul ã¯ã©ã¹ã¿ãŒãã»ããã¢ããããŠãããšãã«èŠã€ããåªãããã¥ãŒããªã¢ã«ã次ã«ç€ºããŸãã
- ãŸããæ¡åŒµå€ãã¡ã€ã«ãå«ã 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 ãµãŒããŒã«å¯Ÿããæš©éãå¿ èŠã«ãªãã®ã§ãè¿œå ããŸãããã
- ã¯ã©ã¹ã¿ãŒ ããã·ã¥ããŒãã«ãããããã ã¢ãã¬ã¹ç¯å²ãã«æ³šç®ãããskywiz-consul-server-pocããã¡ã€ã¢ãŠã©ãŒã« ã«ãŒã«ãåç §ããŠãã ããã
- ãããã®ã¢ãã¬ã¹ç¯å²ã IP ã¢ãã¬ã¹ã®ãªã¹ãã«è¿œå ããããŒã 8301 ããã³ 8300 ãéããŸãã
- Consul UI ã«ç§»åãããšãæ°ååŸã«ããŒã ã¿ãã«ã¯ã©ã¹ã¿ãŒã衚瀺ãããããšãããããŸãã
Consul ãš Kubernetes ã®çµ±åã«ããèªèšŒæ¹æ³ã®æ§æ
- Consul ãµãŒã㌠ã·ã§ã«ã«æ»ããåã«ä¿åããããŒã¯ã³ããšã¯ã¹ããŒãããŸãã
export CONSUL_HTTP_TOKEN=<SecretID>
- èªèšŒã¡ãœããã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã¯ãKubernetes ã¯ã©ã¹ã¿ãŒããã®æ å ±ãå¿ èŠã§ãã
- kubernetes-ãã¹ã
kubectl get endpoints | grep kubernetes
- kubernetes-ãµãŒãã¹-ã¢ã«ãŠã³ã-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
- åºåããäœæããã°ããã®ã«ãŒã«ã® ID ãèŠã€ããŸãã
- æ°ããã«ãŒã«ã䜿çšããŠããŒã«ãäœæããŸãã
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 ãµãŒãã¹ ã¢ã«ãŠã³ã ããŒã¯ã³ã® ID ã確èªããŠèå¥ããèš±å¯ã Consul ã«äžããå¿ èŠããããŸãã
- ãã¡ã€ã«ã«æ¬¡ã®å
容ãæžã蟌ã¿ãŸã
[ãªã³ã¯] :
###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 ã¯ã©ã€ã¢ã³ãã«æ¥ç¶ãã
- è¿°ã¹ãããã«
ãã㧠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
- 次ã«ã次ã®çµã¿èŸŒã¿ã³ãã³ãã䜿çšã㊠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) ãšéžæããå€ã æ°ããã㌠ãã¹ã«é©åãªããªã·ãŒãšããŒã«ãäœæããŸãã ãã€ã³ãã£ã³ã°ã¯åŸã§ãããŸãã
ã«ã¹ã¿ã åå空éãã¹ã:
- ç¬èªã®åå空éãäœæããŸãããã
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
- ããã§ãåã«äœæããèªèšŒã¡ãœããã䜿çšããŠãã°ã€ã³ãªã¯ãšã¹ãã Consul ã«éä¿¡ããŸã [
ãªã³ã¯ ]. - ãµãŒãã¹ ã¢ã«ãŠã³ãããå ¥åãããããŒã¯ã³ã衚瀺ããã«ã¯:
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
- (è€æ°ã®ãã¹ããå®è¡ãããã) äžèšã®æé ã XNUMX è¡ã§å®äºããã«ã¯ã次ã®æé ãå®è¡ããŸãã
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 ãã³ãŒãããŠãããã UI ã®custom-ns/test_key ã®å€ãšäžèŽããããšã確èªã§ããŸãã ãã®ãã¥ãŒããªã¢ã«ã§äžèšãšåãå€ã䜿çšããå Žåããšã³ã³ãŒããããå€ã¯ IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi ã«ãªããŸãã
ãŠãŒã¶ãŒ ãµãŒãã¹ ã¢ã«ãŠã³ãã®ãã¹ã:
- 次ã®ã³ãã³ãã䜿çšããŠã«ã¹ã¿ã ServiceAccount ãäœæããŸãã
ãªã³ã¯ ].
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
- èš±å¯ãæåŠãããŸããã ãããé©åãªæš©éããã€ã³ãã£ã³ã°ããæ°ããã«ãŒã«ãè¿œå ããã®ãå¿ããŠããŸãããããã§è¿œå ããŸãããã
äžèšã®æé ãç¹°ãè¿ããŸãã
a) ãã¬ãã£ãã¯ã¹ãcustom-sa/ãã«å¯ŸããŠåäžã®ããªã·ãŒãäœæããŸãã
b) ããŒã«ãäœæãããcustom-sa-roleããšåä»ããŸãã
c) ããªã·ãŒãããŒã«ã«ã¢ã¿ããããŸãã
- ã«ãŒã« ãã€ã³ãã£ã³ã°ãäœæããŸã (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ãã³ã³ããããå床ãã°ã€ã³ããŸãã æåïŒ
- Custom-sa/key ãã¹ãžã®ã¢ã¯ã»ã¹ã確èªããŠãã ããã
curl
consul-ds-client.default.svc.cluster.local/v1/kv/custom-sa/test_key --header âX-Consul-Token: <SecretID>â
- ãã®ããŒã¯ã³ããcustom-ns/ãã® kv ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããªãããã«ããããšãã§ããŸãã ãcustom-saãããã¬ãã£ãã¯ã¹ãcustom-nsãã«çœ®ãæããŠãäžèšã®ã³ãã³ããç¹°ãè¿ãã ãã§ãã
ã¢ã¯ã»ã¹æåŠã
ãªãŒããŒã¬ã€ã®äŸ:
- ãã¹ãŠã®ã«ãŒã« ãã€ã³ãã£ã³ã° ãããã³ã°ããããã®æš©éãæã€ããŒã¯ã³ã«è¿œå ãããããšã«æ³šæããŠãã ããã
- ã³ã³ãããŒãpoc-ubuntu-custom-saãã¯ããã©ã«ãã®åå空éã«ããã®ã§ããããå¥ã®ã«ãŒã« ãã€ã³ãã£ã³ã°ã«äœ¿çšããŸãããã
- åã®æé ãç¹°ãè¿ããŸãã
a) ãdefault/ãããŒãã¬ãã£ãã¯ã¹ã«å¯ŸããŠåäžã®ããªã·ãŒãäœæããŸãã
b) ããŒã«ãäœæãããdefault-ns-roleããšããååãä»ããŸãã
c) ããªã·ãŒãããŒã«ã«ã¢ã¿ããããŸãã - ã«ãŒã«ãã€ã³ãã£ã³ã°ã®äœæ (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] > [ããŒã¯ã³] ã§ç¢ºèªã§ããŸãã ã芧ã®ãšãããçŸåšã®ããŒã¯ã³ã«ã¯ãcustom-sa-roleãã XNUMX ã€ã ãã¢ã¿ãããããŠããŸãã çŸåšäœ¿çšããŠããããŒã¯ã³ã¯ãã°ã€ã³æã«çæããããã®æç¹ã§äžèŽããã«ãŒã« ãã€ã³ãã£ã³ã°ã¯ XNUMX ã€ã ãã§ããã å床ãã°ã€ã³ããŠæ°ããããŒã¯ã³ã䜿çšããå¿ èŠããããŸãã - ãcustom-sa/ããšãdefault/ãã®äž¡æ¹ã® KV ãã¹ããèªã¿åããããšã確èªããŠãã ããã
æåïŒ
ããã¯ããpoc-ubuntu-custom-saãããcustom-saãããã³ãdefault-nsãã«ãŒã« ãã€ã³ãã£ã³ã°ãšäžèŽããããã§ãã
ãŸãšã
TTLããŒã¯ã³ç®¡ç?
ãã®èšäºã®å·çæç¹ã§ã¯ããã®èªå¯æ¹æ³ã«ãã£ãŠçæãããããŒã¯ã³ã® TTL ã決å®ããçµ±åãããæ¹æ³ã¯ãããŸããã é äºèªèšŒã®å®å šãªèªååãæäŸããçŽ æŽãããæ©äŒãšãªãã§ãããã
TTL ã䜿çšããŠããŒã¯ã³ãæåã§äœæãããªãã·ã§ã³ããããŸãã
https://www.consul.io/docs/acl/acl-system.html#acl-tokens
æå¹æé - ãã®ããŒã¯ã³ãåãæ¶ãããæå»ã (ãªãã·ã§ã³; Consul 1.5.0 ã§è¿œå )- æåäœæ/æŽæ°ã®å Žåã«ã®ã¿ååšããŸã
https://www.consul.io/api/acl/tokens.html#expirationtime
è¿ãå°æ¥ãããŒã¯ã³ã®çææ¹æ³ã (ã«ãŒã«ãŸãã¯èªå¯æ¹æ³ããšã«) å¶åŸ¡ããTTL ãè¿œå ã§ããããã«ãªãããšãé¡ã£ãŠããŸãã
ãããŸã§ã¯ãããžãã¯ã§ãã°ã¢ãŠã ãšã³ããã€ã³ãã䜿çšããããšããå§ãããŸãã
https://www.consul.io/api/acl/acl.html#logout-from-auth-method https://www.consul.io/docs/acl/acl-auth-methods.html#overall-login-process
ç§ãã¡ã®ããã°ã®ä»ã®èšäºããèªã¿ãã ããã
æ¿èªãªãã® ClickHouse ããæ¿èªããã® ClickHouse ãžã®ç§»è¡ã¯ã©ããªããŸããã? GitLab CI/CD ã䜿çšããŠè€æ°ã®ãã€ãã©ã€ã³ãå®è¡ããæ¹æ³ Docker ã€ã¡ãŒãžãçž®å°ããããã® XNUMX ã€ã®ç°¡åãªããªã㯠K8S ã® Ingress ã³ã³ãããŒã©ãŒãšããŠã® Traefik å€æ°ã®ç°çš® Web ãããžã§ã¯ãã®ããã¯ã¢ãã Redmineã®ãã¬ã°ã©ã ãããã èªåèªèº«ãšä»äººã®ç掻ãç°¡çŽ åããæ¹æ³
åºæïŒ habr.com