αααα αΎαααΆααααΉαααααΌααααααΆααααΈααΆαα
ααααααΆα
αα
αααα»ααααααααα ααΎαααΉααααααΎαααΆααα αΆαα
αα·αααααΆαααΌαα
ααααα·αααΎααΎααα
ααααΆααααΆα 1: αα·αααααΆαααΌαα ααΆααααΌαααΆααααα·ααΈααΆαααααα’αα»ααααΆααα»αααα»α
αααα
αΌαααΎα
ααααΆααααΆαα ααΆαααααααΆαααΆααααααααααα ααΈααα ααα»αααααα·αααΆαααΆαααααΆαα’αααΈααααααααΎααααΆααααΆααΆααα’αααααααα ααΌα αααα ααΌα βααΆβααα»αααβαααβααΆαβα α·αααβααα’βααΆβαα½α α’αααβααΎαβα’ααΈαααΊαα·αβαααααΆααβααΆαβααααΆαα α αΎααααααΆαααα... α’ααααααΆαααα ααΆβααΎαα‘αΎαα ααααα½ααα»αααΏααααα
αα»ααααααΎααααααα ααΆααααααΎα POC ααααααΎα ααΌααααααααα αα·αααααΆαααΌαα αααα·ααΈααΆαααααα’αα»ααααΆααααααα»αααα»α (ααααΆααααΆα 1) α αΎααααααα’ααΆαα αααα»αααα·αααααα Kubernetes α
ααααΆαααααααα
αα αααα»ααααααααα ααΎαααΉααααααΎααααΆαααΈααααα»αααα»ααα ααΎαααΆαααΈαααΆα ααααα‘αααααααΉαααΆααααααΆαα½αα ααααα Kubernetes ααΆαα½αααΉααααΆαααΈαααααααα»αααα»ααααααΆαααα‘αΎαα αααααΆααααααΎαααΉααααααΎααααααα·ααΈα’ααα αααααααααααΎααα αααα»ααα α αΎαααααΎαα·ααΈααΆαααααα’αα»ααααΆααααααΆαααααααα ααΆααααααααααααααΎαααΎααααΈα’αΆαααΈαα»αααα»ααα/αααααα αΆαααααααΎαα
ααααΆααααΆαααΆαααααααααααΆαααααα’α·αα’αααΈααααΆαααααααααααααΎααααα»ααααααΎααα αααα»ααααααααα ααααΌα ααΆαααααα·ααααΆαα ααΈααααααα·ααΈααΆαααααα’αα»ααααΆα αααααΉαααααΌαααΆααααααααα ααααααααα
ααααΆααααΆαααΈ 2α αα·αααααΆαααΌαα αααα·ααΈααΆαααααα’αα»ααααΆα Kubernetes
αααααα αααΆααα ααα αααΆαααΈααααα»αααα»ααα·αα αΆαααΆα αααααα αααα α ααααα Kubernetes ααΎααααΈα±ααααΆααααΎαααΆααααααα ααα»ααααβααΆα ααΆααβα’αΆα βααααΎβααΆβααΆαβαα·ααΈβααα αα·αβαααβαααα
ααΌα αααα αααααααααΆααααΆααα·αααααΆαααΌαα αα»αααα»α (ααααΆααααΆα 1) α αΎαα’αα»αααα Kubernetes αα ααΆ ααΎαααα½αααΆαααααΆααααΆαααΆαααΎ (ααααΆααααΆα 2) α αΎααααααα·ααααΆαα ααΈαααααΆαααΌα ααΆααααααα
- ααααΈαα½ααααΉαααΆαααααΈααααΆααααααααΆααααΆαα½αααΆαααααΆααα·αα·ααααααααΆ JWT ααααααααΎα αα·αααααΆααααα Kubernetes α αααααΆαααααΆαααααααααααΌαααΆααααα αΌααα αααα»α pod ααΆαααααΆαααΎααααααα
- αααααα·ααΈ α¬ααααΆααααααααααΎααα ααΆααααα»ααα α αΆααααααΎαααΆααααααααΆα αΌααα ααΆααα’αα·αα·αααα»αααα»αααααααΎαα ααααΎα αΌαααααΉααα½ααααα αΌααα·αα·ααααααααΆ αα·ααααααααααααΎααααααα αααααΎαααΆαα·ααα αα·ααΈααΆαααααα’αα»ααααΆα (αααααα Kubernetes) α ααα αΆαααΈ 2 αααααααΌαααΉαααα αΆαααΈ 1 ααααααΆααααΆααα»αααα»α (αααααααΆαααααΈ 1) α
- α’αα·αα·αααα»αααα»αααααααΎαααΉααααααΌαααααΎααααα αααΆαααΈααααα»αααα»αααααααΎαα
- ααααααα! αααααΊααΆααααααααααααΆαααΈααααα»αααα»ααααααααααΆααααΆαααααΉαααααΌαααααααΎ αααααΌαααααααΆαα’αααΈα’ααααααααΆαααααααΎ αα·αααααααααααΆααΆαα½αααΉαα αααΆαααααααΆααααααααΆαα»ααααααΆαααααααα ααΆααααααβαααβααΆβααααΆααααΆαβαα½αβαααβααΎααααΈβαααα αΆαβααΈβααΏαβαααα ααα αΆααααααααΌαααΉαααα αΆαααΈ 3, 4 αα·α 5 ααααααΆααααΆααα·αααααΆαααΌαα αα»αααα»α (ααααΆααααΆα 1) α
- αααΆαααΈααααα»αααα»αααααααΎααααααΎααα·αα·ααααααααΆαα»αααα»αααΆαα½αααΉαααΆαα’αα»ααααΆααααααααα ααΆαα αααΆαααααα·ααΈααΆαααααα’αα»ααααΆααααααΆααααααΆααααααααΎα (αααααΎαααΆαααααα) ααΆααααααΉαα’ααααααααΆαααααα’αααααααΎαα»αα αααααΆααααααΆααΉααααααΌααααααΆαααααΆααααααααα·αα αααααααΌαααΉαααα αΆαααΈ 6 ααααααΆααααΆααα»αααα»α (ααααΆααααΆαααΈ 1) α
- α’αα·αα·αααα»αααα»αααααααΎααααααΌααααααΆαααααΆαααα ααΆαααααααα·ααΈ α¬ααααΆαααααααααααΎαα»αα
αααααα·ααΈ α¬ααααΆααααααααααΎαα₯α‘αΌααααα’αΆα ααααΎαα·αα·ααααααααΆαα»αααα»αααα ααΎααααΈααααΆααααααααΆαα½ααα·αααααααα»αααα»αααααααΎα ααΌα αααααΆααααααααααα·αααα·αααααααααΆαααααΆααα
αααααααααααΌαααΆααααα αΆα!
αααααΆααβα’αααβαααβαα·αβαααααΆαβα α·αααβαααβααααΆααβααβαααααΆαβα ααβαα½α α αΎαβα ααβααΉαβααΆβααΆβααααΎαβααΆαβαααΆαβααΆ... α²ααβαααα»αβααΉαβααΆβαααΈβααααα βααα»ααααΆα αααααααααΆα"α
ααΌα αααααΆααααααΆααααΈαα»α ααα αΆα "ααααααα" ααααααΎα (ααΌαααΆαααΈ 2: ααα αΆαααΈ 4) ααΊααΆααααααααααααΆαααΈααααα»αααα»ααααααααααΆααααααΎ αααααΌαααααααΆαα’αααΈααααΎ αα·αααααααααααΆαα ααΉαα αααΆαααααααΆααααααααΆαα»ααααααΆαααααααα ααα αΆααααααααΌαααΉαααα αΆαααΈ 3, 4 αα·α 5 ααααααΆααααΆααα·αααααΆαααΌαα αα»αααα»α (ααααΆααααΆα 1) α ααΆαααααααααααΆααααΆααααΆα (ααααΆααααΆαααΈα£) ααααααααααα αΆααααΆαα αααΆααααΌαα’αααΈααααααα»αααΎαα‘αΎα αα ααααααααααΆαα αα·ααΈααΆαααααα’αα»ααααΆα Kubernetes ααΆααααΆααα
ααααΆααααΆαααΈ α£α αααααααααααΌαααΆααααα αΆα!
- ααΆα ααα»α α αΆααααααΎα α’αα·αα·αααα»αααα»αααααααΎααααααΌαααααΎα αΌααα ααΆαααααΆαααΈααααα»αααα»αααααααΎαααΆαα½αααΉααα·αα·ααααααααΆααααΈ Kubernetes αα·ααααααα§ααΆα αααααΆααααΆαααααα·ααΈααΆαααααα’αα»ααααΆααααααααΌαααΆααααααΎααα»ααααα ααα αΆααααααααΌαααααΆαα ααΉαααα αΆαααΈ 3 αα αααα»αααΆαααααααα’αααΈααααααΈαα»αα
- α₯α‘αΌαααααααΆαααΈααααα»αααα»α (α¬α’αααααΉαααΆα) ααααΌαααΆααααααααααΆααααΆαααααΉαααααΌααααααααΆαααααΆαααααααα½αααΆαα ααΌα αααα ααΆααΉααα·αααααααΆαα½ααααα»α Kubernetes (ααΆαααααααΆαααΈαααααααα»αααα»α) α αΎααααααΆαααΆαα’αα»ααααΆααααααα ααΎαααΉαααααααααααΆααΎαα·αα·ααααααααΆαααααΆαααααα·αααααΆαα αα·αααΆαααααα·αααα·ααααα’αααααΆα
- αααααΆααααααααΎαααααΆααα»ααααΆαααααΌαααΆαααααααααΌααααααΆααα»αααα»α α αΎααααΆαααΈααααα»αααα»αααααΎαα§ααΆα ααααα·ααΈααΆαααααα’αα»ααααΆααααααΆαααααααααααΆααααααΆααααΈααΆαααααΎαα»αα αΌα (αα·ααααααα Kubernetes)α
- ααααΉαααΆααα»αααα»ααααααα’ααααααααΆααα·ααΈααΆαααααα’αα»ααααΆααααααΆααααααΆαα (ααααα·αααΎααααΎα) α αΎαα’αΆααααα»αααα αααΆααα ααααααααΌαααΆαααααΆααααΆαα½αααΆα αααααΆααααααΆα’αΆαα αααΆααααΆααααα α αΎααααααααααα½αααΆαα ααΉαααααααα’ααααααααΆααααααΆααααααααααΆααα
- ααΆ-ααΆ! α αΌααααααα ααα αΆαααΈ 5 αα αααα»αααΆαααααααα’αααΈααααααΈαα»αα
ααααΎαααΆα Consul-server αα ααΎαααΆαααΈααα·αααα·αααααααΆα
α αΆααααΈααααααααα ααΆαα αααΎααααα»αααΉααααααααΆαααααΆαα’αααΈαααααααααΎα POC ααα ααΆααΉαααΆαααα αααα»αα ααα»α α ααα»α αααααααΆαααΆαααααααααααααα ααΌα ααααΆαααααα ααΌα αααααΆαααααααααΆααααΈαα»α αααα»αααΉαααααΎ GCP ααΎααααΈαααααΎαα αααααΆαα ααΆααααααααααΆααα’αα ααα»ααααα’αααα’αΆα αααααΎαα αααααΆαα ααΆααααααααααΌα ααααΆαα αααααααααααα
- α αΆααααααΎααααΆαααΈααα·αααα·α (α§ααΆα ααα/αααΆαααΈααα)α
- αααααΎαα αααΆαααααααΆαααααααΆααααααΎα (αααα»ααα»ααααα·ααΆααααα»α AWS)α
- αααα»αα αΌαα α·ααααααααααααααααΆαααΈαααΌα ααααΆααΆααα αααΆαα αα·αααααΆααααααΆα αααα»αααααΈααα "skywiz-consul-server-poc" α
- αααααααα’αΆααααααΆα IP αααααα»αααααΌααααααα»ααααααααααα’ααα α αΎαααααααααΆαα αααα»ααααααΈα’αΆααααααΆα IP ααααα ααΌα ααααααΎαα’αΆα α αΌαααααΎα ααα»α αααααΆααα’αααααααΎ (UI) α
- ααΎαα
ααα 8500 αααααΆαα UI α α
α»α
αααααΎαα ααΎαααΉαααααΆααααααΌααααααΆααααααΎααααααααααααααα»ααααααΆαααααα [
ααα ]. - ααααααα αααΆαααααααΆααααααΎααα ααααα»α αααααααα ααααΆααααααααααα VM αα ααΎαααΆαααΈααααα»αααα»α α αΎααααααα "skywiz-consul-server-poc" αα αααα»αααΆαααααΆααααααΆαα α α»α αααααΆαα»αα
- ααα‘αΎααα»αααα»ααα ααΎαααΆαααΈααα·αααα·α ααΌααα·αα·αααααΎααα ααΈαααα α αα αΆαααΆα’αααααααΌαααΆααααααα»αααα»αβ₯ 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" α
- ααΆααΆαααααααααΆαα αααααΊααΆααΆαααααααααααα’ααααααα»αααΆαααααααΆαααα ααααααα ααααα»ααα»αααα»α 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α
- α αΌααα ααΆαα Consul UI α αΎααααααΆααααΈααΈαααΈααΆααΈα’αααααΉαααΎαα αααααααααααΎαααα α‘αΎααα αααα»αααααΆααααααΆααα
ααααααα ααΆαααααααααα·ααΈααΆαααααα’αα»ααααΆαααααα½ααααα αΌααα»αααα»αααΆαα½α 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) αα·αααααααααααααΎαααααα’αααα αααααΎαααααααααΆα αα·ααα½ααΆααΈαααααααααααΆααααααΌααααααΉαααααΈαα ααΎαβααΉαβααααΎβααΆαβα αβαα βαααβαααααα
ααΆαααααΎαααααααα αααααααααΆαααααα½αα
- ααααααααΎααααααααααΆαααααα½αααααααΎαα
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 α
αα αΌαααααααααααα ααΆααααΌαααΆαααααΎα±ααα’αααααααΎα ααα»α αααα ααααααΆαα αΆαα αααα αααα»ααααααα·ααααΆααααα’αααα
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 Traefik ααΆα§ααααααααααΆ Ingress αααααΆαα K8S ααΆαβααααα»αβαα»αβααβααααααβαααααΆαβαα»αβααααΆβαα½αβα ααα½αβαα Telegram bot αααααΆαα Redmine α αα·ααΈααααΎα±ααααΈαα·αααΆαααααααααΆαααααα½αα’ααα αα·αα’αααααα
ααααα: www.habr.com