ื ืืื, ืืืจื ืืฉืืจืืจ
ืืืืจืื ืื ื ืืฆืืจ ืฆืขื ืืืจ ืฆืขื
ืกืงืืจื
ืื ื ืื ื
ืชืจืฉืื 1: ืกืงืืจื ืจืฉืืืช ืฉื ืฉืืืช ืืืฉืืจ ืืงืื ืกืื
ืืืื ื ืกืชืื ืคื ืืื
ืืื, ืืฉ ืฉื ืืืืข ืฉืืืืฉื, ืืื ืืื ืืืจืื ืืื ืืืฉืชืืฉ ืืื ืื ืืคืืขื. ืืื, ืืื ืื ืืื ืฉืคืื, ืืชื ืกืืจืง ืืืื ืืจื ื ืืื ืืงืื ืืืจืื. ืืื... ืืชื ื ืืฉื. ืื ืงืืจื. ืืื ื ืชืงื ืืช ืื.
ืืคื ื ืฉื ืขืืืจ ืืืฆืืจืช ื-POC ืฉืื ื, ืืื ื ืืืืจ ืืกืงืืจื ืืืืืืช ืฉื ืฉืืืืช ืืืจืฉืื ืฉื ืงืื ืกืื (ืชืจืฉืื 1) ืื ืืื ืืืชื ืืืงืฉืจ ืฉื Kubernetes.
ืืืจืืืืืช
ืืืืจืื ืื, ื ืืฆืืจ ืฉืจืช Consul ืขื ืืืฉื ื ืคืจื ืฉืืชืงืฉืจ ืขื ืืฉืืื Kubernetes ืขื ืืงืื Consul ืืืชืงื. ืืืืจ ืืื ื ืืฆืืจ ืืช ืืคืืืงืฆืืืช ืืืื ืฉืื ื ืืคืื ืื ืฉืชืืฉ ืืฉืืืช ืืืจืฉืื ืืืืืืจืช ืฉืื ื ืืื ืืงืจืื ืืืืืจ ืืืคืชื/ืขืจื ืฉื Consul.
ืืชืจืฉืื ืฉืืืื ืืคืจื ืืช ืืืจืืืืงืืืจื ืฉืื ื ืืืฆืจืื ืืืืจืื ืื, ืืื ืื ืืช ืืืืืืื ืืืืืจื ืฉืืืช ืืืจืฉืื, ืฉืชืืกืืจ ืืืืฉื.
ืชืจืฉืื 2: ืกืงืืจื ืืืืืช ืฉื ืฉืืืช ืืืจืฉืื ืฉื Kubernetes
ืืขืจื ืืืืจื: ืฉืจืช ืืงืื ืกืื ืื ืฆืจืื ืืืืืช ืืืืฅ ืืืฉืืื Kubernetes ืืื ืฉืื ืืขืืื. ืืื ืื, ืืื ืืืื ืืขืฉืืช ืืช ืื ืืื ืืืื.
ืื, ืื ืืืงืืื ืืช ืืืืืจืืช ืกืงืืจืช ืืงืื ืกืื (ืชืจืฉืื 1) ืืืืืืื ืขืืื ืืช Kubernetes, ืื ื ืืงืืืื ืืช ืืืืืืจืื ืฉืืืขืื (ืชืจืฉืื 2), ืืืืืืืื ืืื ืืื ืืืืงืื:
- ืืื ืคืื ืืฆืืจืฃ ืืฉืืื ืฉืืจืืช ืืืืื ืืกืืืื JWT ืฉื ืืฆืจ ืืืืืจ ืขื ืืื Kubernetes. ืืกืืืื ืื ืืืื ืก ืื ืืชืจืืื ืืืจืืจืช ืืืื.
- ืืืคืืืงืฆืื ืื ืืฉืืจืืช ืฉืื ื ืืชืื ืืคืื ืืืื ืคืงืืืช ืืชืืืจืืช ืืืงืื ืืงืื ืกืื ืฉืื ื. ืืงืฉืช ืืืชืืืจืืช ืชืืืื ืื ืืช ืืืกืืืื ืืืฉื ืฉืื ื ื ืืฆืจ ืืืืืื ืฉืืืช ืืจืฉืื (ืกืื Kubernetes). ืฉืื ืืก' 2 ืื ืืชืืื ืืฉืื 1 ืืชืจืฉืื ืืงืื ืกืื (ืกืืื 1).
- ืืงืื ืืงืื ืกืื ืฉืื ื ืืขืืืจ ืืช ืืืงืฉื ืืื ืืฉืจืช ืืงืื ืกืื ืฉืื ื.
- ืงึถืกึถื! ืื ืืืงืื ืฉืื ืฉืจืช ื-Consul ืืืืื ืืช ืืืืชื ืืืืช ืฉื ืืืงืฉื, ืืืกืฃ ืืืืข ืขื ืืืืช ืืืงืฉื ืืืฉืืื ืืืชื ืืื ืืืืื ืืืืืจืื ืืจืืฉ ืืงืฉืืจืื ืืืื. ืืืื ืชืจืฉืื ื ืืกืฃ ืืื ืืืืืืฉ ืืืช. ืฉืื ืื ืืชืืื ืืฉืืืื 3, 4 ื-5 ืืชืจืฉืื ืกืงืืจืช ืืงืื ืกืื (ืชืจืฉืื 1).
- ืฉืจืช ื-Consul ืฉืื ื ืืืืฆืจ ืืกืืืื ืงืื ืกืื ืขื ืืจืฉืืืช ืืืชืื ืืืืื ืฉืืืช ืืืจืฉืื ืฉืฆืืื ื (ืฉืืืืจื ื) ืืืื ืืืืช ืืืืงืฉ. ืืืืจ ืืื ืืื ืืฉืื ืืช ืืืกืืืื ืืืืจื. ืื ืืชืืื ืืฉืื 6 ืืชืจืฉืื ืืงืื ืกืื (ืชืจืฉืื 1).
- ืืงืื ืืงืื ืกืื ืฉืื ื ืืขืืืจ ืืช ืืืกืืืื ืืืคืืืงืฆืื ืื ืืฉืืจืืช ืืืืงืฉืื.
ืืืคืืืงืฆืื ืื ืืฉืืจืืช ืฉืื ื ืืืืืื ืืขืช ืืืฉืชืืฉ ืืืกืืืื ืืงืื ืกืื ืืื ืืื ืืชืงืฉืจ ืขื ื ืชืื ื ืืงืื ืกืื ืฉืื ื, ืืคื ืฉื ืงืืข ืขื ืคื ืืืจืฉืืืช ืฉื ืืืกืืืื.
ืืงืกื ืืชืืื!
ืืืื ืืื ืฉืื ืฉืืืื ืจืง ืขื ืืจื ื ืืชืื ืืืืข ืืจืืฆืื ืืืขืช ืืื ืื ืขืืื... ืืจืฉื ืื "ืืืจืืืช ืืื ืืื ืขืืืง ืืืจ ืืืจื ื".
ืืคื ืฉืืืืืจ ืงืืื ืืื, ืฉืื ื"ืงืกื" ืฉืื ื (ืืืืจ 2: ืฉืื 4) ืืื ืืืงืื ืฉืื ืฉืจืช ืืงืื ืกืื ืืืืช ืืช ืืืงืฉื, ืืืกืฃ ืืืืข ืขื ืืืงืฉื ืืืฉืืื ืืืชื ืืืืืื ืืืืืจืื ืืจืืฉ ืืงืฉืืจืื ืืืื. ืฉืื ืื ืืชืืื ืืฉืืืื 3, 4 ื-5 ืืชืจืฉืื ืกืงืืจืช ืืงืื ืกืื (ืชืจืฉืื 1). ืืืื ืชืจืฉืื (ืชืจืฉืื 3), ืฉืืืจืชื ืืืจืืืช ืืืืจืืจ ืื ืงืืจื ืืคืืขื ืืชืืช ืืืืกืช ืืื ืืข ืฉืืืช ืืจืฉืื ืกืคืฆืืคืืช ืฉื Kubernetes.
ืชืจืฉืื 3: ืืงืกื ืืชืืื!
- ืื ืงืืืช ืืชืืื, ืืงืื ืืงืื ืกืื ืฉืื ื ืืขืืืจ ืืช ืืงืฉืช ืืื ืืกื ืืฉืจืช ืืงืื ืกืื ืฉืื ื ืขื ืืกืืืื ืืฉืืื Kubernetes ืืฉื ืืืคืข ืกืคืฆืืคื ืฉื ืฉืืืช ืืืจืฉืื ืฉื ืืฆืจื ืงืืื ืืื. ืฉืื ืื ืืชืืื ืืฉืื 3 ืืืกืืจ ืืืขืื ืืงืืื.
- ืืขืช ืฉืจืช ืืงืื ืกืื (ืื ืืื ืืื) ืฆืจืื ืืืืช ืืช ืืืืชื ืืืืช ืฉื ืืืกืืืื ืฉืืชืงืื. ืืื, ืืื ืชืชืืืขืฅ ืขื ืืฉืืื Kubernetes (ืืจื ืืืงืื ืฉื Consul) ืืขื ืืืจืฉืืืช ืืืชืืืืืช, ื ืืจืจ ืื ืืืกืืืื ืืืืชื ืืืื ืืื ืฉืืื.
- ืืืืจ ืืื ืืืงืฉื ืืืืืืชืช ืืืืืจืช ืืื ืืื ืืงืื ืกืื, ืืฉืจืช ืืงืื ืกืื ืืืคืฉ ืืช ืืืคืข ืฉืืืช ืืืจืฉืื ืขื ืืฉื ืฉืฆืืื ืืืงืฉืช ืืื ืืกื (ืืกืื Kubernetes).
- ืื ืืื ืืงืื ืกืื ืืืื ืืช ืืืคืข ืฉืืืช ืืืจืฉืื ืฉืฆืืื (ืื ื ืืฆื) ืืงืืจื ืืช ืืขืจืืช ืืืืืื ืืืืืืืื ืืืฆืืจืคืื ืื. ืืืืจ ืืื ืืื ืงืืจื ืืช ืืืืืื ืืืื ืืืฉืืื ืืืชื ืืชืืื ืืช ืืืืืช ืืืืืืชืืช.
- ืื ืื! ื ืขืืืจ ืืฉืื 5 ืืืกืืจ ืืืขืื ืืงืืื.
ืืคืขื ืืช Consul-server ืขื ืืืื ื ืืืจืืืืืืช ืจืืืื
ืืขืชื ืืืืื, ืื ื ืืขืืงืจ ืืชื ืืืจืืืช ืืืฆื ืืืฆืืจ ืืช ื-POC ืืื, ืืขืชืื ืงืจืืืืช ืืชืืืืืื, ืืื ืืกืืจืื ืืืืื ืืืฉืคืืื. ืืื ืื, ืืคื ืฉืฆืืื ืงืืื ืืื, ืืฉืชืืฉ ื-GCP ืืื ืืืฆืืจ ืืช ืื ืืชืฉืชืืช, ืืื ืืชื ืืืื ืืืฆืืจ ืืช ืืืชื ืชืฉืชืืช ืืื ืืงืื ืืืจ.
- ืืคืขื ืืช ืืืืื ื ืืืืจืืืืืืช (ืืืคืข/ืฉืจืช).
- ืฆืืจ ืืื ืขืืืจ ืืืืช ืืืฉ (ืงืืืฆืช ืืืืื ื-AWS):
- ืื ื ืืืื ืืืงืฆืืช ืืช ืืืชื ืฉื ืืืื ื ืื ืืืื ืืื ืืชื ืืจืฉืช, ืืืงืจื ืืื "skywiz-consul-server-poc".
- ืืฆื ืืช ืืชืืืช ื-IP ืฉื ืืืืฉื ืืืงืืื ืฉืื ืืืืกืฃ ืืืชื ืืจืฉืืืช ืืชืืืืช ื-IP ืฉื ืืืงืืจ ืืื ืฉื ืืื ืืืฉืช ืืืืฉืง ืืืฉืชืืฉ (UI).
- ืคืชื ืืช ืืฆืืื 8500 ืขืืืจ ืืืฉืง ืืืฉืชืืฉ. ืืืฅ ืขื ืฆืืจ. ืื ื ื ืฉื ื ืืช ืืืืช ืืืฉ ืืื ืฉืื ืืงืจืื [
ืงืฉืจ ]. - ืืืกืฃ ืืื ืืืืช ืืฉ ืืืืคืข. ืืืืจ ืืืื ืืืืืื ืื ืฉื VM ื-Consul Server ืืืืกืฃ "skywiz-consul-server-poc" ืืฉืื ืชืื ืืจืฉืช. ืืืฅ ืขื ืฉืืืจ.
- ืืชืงื ืืช 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".
- ืืืขืจื ืฆืืืืช, ืื ื ืืืจืื ืืื ืฉื ืชืงืืชื ืื ืืืื ืืงืืช ืืฉืืื 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.
- ืขืืืจ ืื ื-Consul UI ืืืืืจ ืืกืคืจ ืืงืืช ืชืจืื ืืช ืืืฉืืื ืฉืื ื ืืืคืืข ืืืฉืื ืืช ืืฆืืชืื.
ืืืืจืช ืฉืืืช ืืจืฉืื ืขื ืืื ืฉืืืื ืฉื 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) ืืขืจื ืืืืืจืชื. ืฆืืจ ืืืื ืืืช ืืชืคืงืืืื ืืชืืืืื ืื ืชืืื ืืคืชื ืืืฉืื. ืื ืื ื ื ืขืฉื ืืช ืืืจืืืืช ืืืืืจ ืืืชืจ.
ืืืืงืช ืืจืื ืฉืืืช ืืืชืื ืืืฉืืช:
- ืืืื ื ืืฆืืจ ืืจืื ืฉืืืช ืืฉืื ื:
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:
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 Traefik ืืืงืจ Ingress ืขืืืจ K8S ืืืืื ืฉื ืืกืคืจ ืจื ืฉื ืคืจืืืงืื ืืื ืืจื ื ืืืจืืื ืืื ืืื ืืืืจื ืขืืืจ Redmine. ืืื ืืคืฉื ืืช ืืืืื ืืขืฆืื ืืืืืจืื
ืืงืืจ: www.habr.com