ื“ื™ ืึทื‘ืง ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก: ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ, ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ืึทื•ื“ื™ื˜ื™ื ื’

ื“ื™ ืึทื‘ืง ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก: ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ, ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ืึทื•ื“ื™ื˜ื™ื ื’

ื’ื™ื›ืขืจ ืึธื“ืขืจ ืฉืคึผืขื˜ืขืจ, ืื™ืŸ ื“ืขืจ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืงื™ื™ืŸ ืกื™ืกื˜ืขื, ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ึทื˜ ืขืจื™ื™ื–ืึทื–: ื™ื ืฉื•ืจื™ื ื’ ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ, ืฆืขืฉื™ื™ื“ื•ื ื’ ืคื•ืŸ ืจืขื›ื˜, ืึทื“ืึทื˜ื™ื ื’ ืื•ืŸ ืื ื“ืขืจืข ื˜ืึทืกืงืก. ืฉื•ื™ืŸ ื‘ืืฉืืคืŸ ืคึฟืึทืจ Kubernetes ืคื™ืœืข ืกืึทืœื•ืฉืึทื ื–, ื•ื•ืึธืก ืœืึธื–ืŸ ืื™ืจ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื”ืขืกืงืขื ืžื™ื˜ ืกื˜ืึทื ื“ืึทืจื“ืก ืืคื™ืœื• ืื™ืŸ ื–ื™ื™ืขืจ ืคืื“ืขืจืŸ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ ... ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืžืึทื˜ืขืจื™ืึทืœ ืื™ื– ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืฆื• ื“ื™ ื™ืงืขืจื“ื™ืง ืึทืกืคึผืขืงืฅ ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ึทื˜ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืื™ืŸ ื“ื™ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืžืขืงืึทื ื™ื–ืึทืžื– ืคื•ืŸ ื“ื™ ืง8ืก. ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ื‘ืึทืงืขื ืขืŸ ื–ื™ืš ืžื™ื˜ Kubernetes - ื•ื•ื™ ืึท ืกื˜ืึทืจื˜ื™ื ื’ ืคื•ื ื˜ ืคึฟืึทืจ ืœืขืจื ืขืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜-ืคึฟืึทืจื‘ื•ื ื“ืขื ืข ื™ืฉื•ื–.

ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ

ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ื˜ื™ื™ืคึผืก ืคื•ืŸ ื ื™ืฆืขืจืก ืื™ืŸ Kubernetes:

  • ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ืฅ - ืึทืงืึทื•ื ืฅ ื’ืขืจืื˜ืŸ ื“ื•ืจืš ื“ื™ Kubernetes API;
  • ื ื™ืฆืขืจืก - "ื ืึธืจืžืึทืœ" ื ื™ืฆืขืจืก ื’ืขืจืื˜ืŸ ื“ื•ืจืš ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง, ืคืจื™ื™ึท ื‘ืึทื“ื™ื ื•ื ื’ืก.

ื“ืขืจ ื”ื•ื™ืคึผื˜ ื—ื™ืœื•ืง ืฆื•ื•ื™ืฉืŸ ื“ื™ ื˜ื™ื™ืคึผืก ืื™ื– ืึทื– ืคึฟืึทืจ ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ืฅ ืขืก ื–ืขื ืขืŸ ืกืคึผืขืฆื™ืขืœ ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ื“ื™ Kubernetes API (ื–ื™ื™ ื–ืขื ืขืŸ ื’ืขืจื•ืคืŸ ืึทื– - ServiceAccounts), ื•ื•ืึธืก ื–ืขื ืขืŸ ื˜ื™ื™ื“ ืฆื• ืึท ื ืึทืžืขืกืคึผืึทืกืข ืื•ืŸ ืึท ืกื›ื•ื ืคื•ืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ื“ืึทื˜ืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ ืื™ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืคื•ืŸ ื“ื™ ืกืขืงืจืขืฅ ื˜ื™ืคึผ. ืึทื–ืึท ื ื™ืฆืขืจืก (ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ืฅ) ื–ืขื ืขืŸ ื‘ืคึฟืจื˜ ื‘ื“ืขื” ืฆื• ืคื™ืจืŸ ืึทืงืกืขืก ืจืขื›ื˜ ืฆื• ื“ื™ Kubernetes API ืคื•ืŸ ืคึผืจืึทืกืขืกืึทื– ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื“ื™ Kubernetes ืงื ื•ื™ืœ.

ืคึผืจืึธืกื˜ ื™ื•ื–ืขืจื– ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืื™ื™ื ืกืŸ ืื™ืŸ ื“ื™ Kubernetes API: ื–ื™ื™ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื’ืขืจืื˜ืŸ ื“ื•ืจืš ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืžืขืงืึทื ื™ื–ืึทืžื–. ื–ื™ื™ ื–ืขื ืขืŸ ื‘ื“ืขื” ืคึฟืึทืจ ืžืขื ื˜ืฉืŸ ืึธื“ืขืจ ืคึผืจืึทืกืขืกืึทื– ื•ื•ืึธืก ืœืขื‘ืŸ ืึทืจื•ื™ืก ื“ืขื ืงื ื•ื™ืœ.

ื™ืขื“ืขืจ ืึทืคึผื™ ื‘ืขื˜ืŸ ืื™ื– ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืึธื“ืขืจ ืึท ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ื˜, ืึท ื‘ืึทื ื™ืฆืขืจ ืึธื“ืขืจ ืื™ื– ื’ืขื”ืืœื˜ืŸ ืึทื ืึทื ืึทืžืึทืก.

ื‘ืึทื ื™ืฆืขืจ ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ื“ืึทื˜ืŸ ื›ื•ืœืœ:

  • ื ืืžืขืŸ - ื ืืžืขืŸ (ืฉืคึผื™ืจืขื•ื•ื“ื™ืง ืคึฟืึทืจ ืคืึทืœ!);
  • ื•ื™ื“ - ืึท ืžืึทืฉื™ืŸ-ืœื™ื™ื ืขื•ื•ื“ื™ืง ื‘ืึทื ื™ืฆืขืจ ืœืขื’ื™ื˜ื™ืžืึทืฆื™ืข ืฉื˜ืจื™ืงืœ ื•ื•ืึธืก ืื™ื– "ืžืขืจ ืงืึธื ืกื™ืกื˜ืขื ื˜ ืื•ืŸ ื™ื™ื ืฆื™ืง ื•ื•ื™ ื“ื™ ื ืืžืขืŸ";
  • ื’ืจื•ืคึผืขืก - ืจืฉื™ืžื” ืคื•ืŸ ื’ืจื•ืคึผืขืก ืฆื• ื•ื•ืึธืก ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ื’ืขื”ืขืจื˜;
  • ืขืงืกื˜ืจืข - ื ืึธืš ืคืขืœื“ืขืจ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื“ื•ืจืš ื“ื™ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืžืขืงืึทื ื™ื–ืึทื.

Kubernetes ืงืขื ืขืŸ ื ื•ืฆืŸ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ืžืขืงืึทื ื™ื–ืึทืžื–: X509 ืกืขืจื˜ื™ืคื™ืงืึทืฅ, ื˜ืจืขื’ืขืจ ื˜ืึธืงืขื ืก, ืึธื˜ืขื ื˜ืึทืงื™ื™ื˜ื™ื ื’ ืคึผืจืึทืงืกื™, HTTP Basic Auth. ืžื™ื˜ ื“ื™ ืžืขืงืึทื ื™ื–ืึทืžื–, ืื™ืจ ืงืขื ืขืŸ ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืกืงื™ืžื–: ืคึฟื•ืŸ ืึท ืกื˜ืึทื˜ื™ืง ื˜ืขืงืข ืžื™ื˜ ืคึผืึทืกื•ื•ืขืจื“ื– ืฆื• OpenID OAuth2.

ื“ืขืจืฆื•, ืขืก ืื™ื– ืžืขื’ืœืขืš ืฆื• ื ื•ืฆืŸ ืขื˜ืœืขื›ืข ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืกืงื™ืžื– ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™. ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ื“ืขืจ ืงื ื•ื™ืœ ื ื™ืฆื˜:

  • ืกืขืจื•ื•ื™ืก ื—ืฉื‘ื•ืŸ ื˜ืึธืงืขื ืก - ืคึฟืึทืจ ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ืฅ;
  • X509 - ืคึฟืึทืจ ื™ื•ื–ืขืจื–.

ื“ื™ ืงืฉื™ื ื•ื•ืขื’ืŸ ืึธื ืคื™ืจื•ื ื’ ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ืฅ ืื™ื– ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ืขื ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืึธื‘ืขืจ ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืฆื• ื‘ืึทืงืขื ืขืŸ ื–ื™ืš ืžื™ื˜ ื“ืขื ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ, ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื‘ืœืขื˜ืขืจ. ืžื™ืจ ื•ื•ืขืœืŸ ื ืขืžืขืŸ ืึท ื ืขืขื ื˜ืขืจ ืงื•ืง ืื™ืŸ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืคื•ืŸ ื•ื•ื™ X509 ืกืขืจื˜ื™ืคื™ืงืึทืฅ ืึทืจื‘ืขื˜.

ืกืขืจื˜ื™ืคื™ืงืึทืฅ ืคึฟืึทืจ ื™ื•ื–ืขืจื– (X.509)

ื“ืขืจ ืงืœืึทืกื™ืฉ ื•ื•ืขื’ ืคื•ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืกืขืจื˜ื™ืคื™ืงืึทืฅ ื™ื ื•ื•ืึทืœื•ื•ื–:

  • ืฉืœื™ืกืœ ื“ื•ืจ:
    mkdir -p ~/mynewuser/.certs/
    openssl genrsa -out ~/.certs/mynewuser.key 2048
  • ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ืึท ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื‘ืขื˜ืŸ:
    openssl req -new -key ~/.certs/mynewuser.key -out ~/.certs/mynewuser.csr -subj "/CN=mynewuser/O=company"
  • ืคึผืจืึทืกืขืกื™ื ื’ ืึท ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื‘ืขื˜ืŸ ื ื™ืฆืŸ ื“ื™ Kubernetes ืงื ื•ื™ืœ CA ืฉืœื™ืกืœืขืŸ, ื‘ืึทืงื•ืžืขืŸ ืึท ื‘ืึทื ื™ืฆืขืจ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ (ืฆื• ืงืจื™ื’ืŸ ืึท ื‘ืึทื•ื•ื™ื™ึทื–ืŸ, ืื™ืจ ืžื•ื–ืŸ ื ื•ืฆืŸ ืึท ื—ืฉื‘ื•ืŸ ื•ื•ืึธืก ื”ืื˜ ืึทืงืกืขืก ืฆื• ื“ื™ Kubernetes ืงื ื•ื™ืœ CA ืฉืœื™ืกืœ, ื•ื•ืึธืก ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื™ื– ืœื™ื’ืŸ ืื™ืŸ /etc/kubernetes/pki/ca.key):
    openssl x509 -req -in ~/.certs/mynewuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out ~/.certs/mynewuser.crt -days 500
  • ืฉืึทืคึฟืŸ ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข:
    • ืงื ื•ื™ืœ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ (ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืึทื“ืจืขืก ืื•ืŸ ืึธืจื˜ ืคื•ืŸ ื“ื™ CA ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื˜ืขืงืข ืคึฟืึทืจ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืงื ื•ื™ืœ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’):
      kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.100.200:6443
    • ืึธื“ืขืจ ื•ื•ื™ ืงื™ื™ืŸืจืขืงืึทืžืขื ื“ื™ื“ ืึธืคึผืฆื™ืข - ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ (ื“ืขืจื ืึธืš kubectl ื•ื•ืขื˜ ื ื™ืฉื˜ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืงืขืจืขืงื˜ื ืึทืก ืคื•ืŸ ื“ื™ ืึทืคึผื™ ืกืขืจื•ื•ืขืจ ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ):
      kubectl config set-cluster kubernetes  --insecure-skip-tls-verify=true --server=https://192.168.100.200:6443
    • ืึทื“ื™ื ื’ ืึท ื‘ืึทื ื™ืฆืขืจ ืฆื• ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข:
      kubectl config set-credentials mynewuser --client-certificate=.certs/mynewuser.crt  --client-key=.certs/mynewuser.key
    • ืึทื“ื™ื ื’ ืงืึธื ื˜ืขืงืกื˜:
      kubectl config set-context mynewuser-context --cluster=kubernetes --namespace=target-namespace --user=mynewuser
    • ืคืขืœื™ืงื™ื™ึทื˜ ืงืึธื ื˜ืขืงืกื˜ ืึทืกื™ื™ื ืžืึทื ื˜:
      kubectl config use-context mynewuser-context

ื ืึธืš ื“ื™ ืื•ื™ื‘ืŸ ืžืึทื ื™ืคึผื™ืึทืœื™ื™ืฉืึทื ื–, ืื™ืŸ ื“ืขืจ ื˜ืขืงืข .kube/config ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ื™ ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /etc/kubernetes/pki/ca.crt
    server: https://192.168.100.200:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: target-namespace
    user: mynewuser
  name: mynewuser-context
current-context: mynewuser-context
kind: Config
preferences: {}
users:
- name: mynewuser
  user:
    client-certificate: /home/mynewuser/.certs/mynewuser.crt
    client-key: /home/mynewuser/.certs/mynewuser.key

ืฆื• ืžืึทื›ืŸ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืฆื•ื•ื™ืฉืŸ ืึทืงืึทื•ื ืฅ ืื•ืŸ ืกืขืจื•ื•ืขืจืก, ืขืก ืื™ื– ื ื•ืฆื™ืง ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืฉืœื™ืกืœืขืŸ:

  • certificate-authority
  • client-certificate
  • client-key

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ืงืขื ืขืŸ ืขื ืงืึธื•ื“ ื“ื™ ื˜ืขืงืขืก ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื–ื™ื™ ื ื™ืฆืŸ base64 ืื•ืŸ ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ ืื™ืŸ ื“ื™ ืงืึธื ืคื™ื’, ืึทื“ื™ื ื’ ื“ื™ ืกืึทืคื™ืงืก ืฆื• ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืฉืœื™ืกืœืขืŸ. -data, ื“.ื”. ื•ื•ื™ื™ืœ ื‘ืืงื•ืžืขืŸ certificate-authority-data ืืื–"ื• ื•

ืกืขืจื˜ื™ืคื™ืงืึทืฅ ืžื™ื˜ ืงื•ื‘ืขืึทื“ื

ืžื™ื˜ ื“ืขืจ ืžืขืœื“ื•ื ื’ ืงื•ื‘ืขืจื ืขื˜ืขืก 1.15 ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืกืขืจื˜ื™ืคื™ืงืึทืฅ ืื™ื– ื’ืขื•ื•ืืจืŸ ืคื™ืœ ื’ืจื™ื ื’ืขืจ ื“ืึทื ืง ืฆื• ื“ื™ ืึทืœืฃ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ึทืŸ ืฉื˜ื™ืฆืŸ ืื™ืŸ kubeadm ื ื•ืฆืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ืึธืก ืื™ื– ื•ื•ืึธืก ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืžื™ื˜ ื‘ืึทื ื™ืฆืขืจ ืฉืœื™ืกืœืขืŸ ืงืขืŸ ืื™ืฆื˜ ืงื•ืงืŸ ื•ื•ื™:

kubeadm alpha kubeconfig user --client-name=mynewuser --apiserver-advertise-address 192.168.100.200

NB: ืคืืจืœืื ื’ื˜ ืžืขืœื“ืŸ ืึทื“ืจืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื“ื™ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ื•ื•ืึธืก ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื™ื– ืœื™ื’ืŸ ืื™ืŸ /etc/kubernetes/manifests/kube-apiserver.yaml.

ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• stdout. ืขืก ื“ืึทืจืฃ ืฆื• ื–ื™ื™ืŸ ื’ืขืจืื˜ืขื•ื•ืขื˜ ืื™ืŸ ~/.kube/config ื‘ืึทื ื™ืฆืขืจ ื—ืฉื‘ื•ืŸ ืึธื“ืขืจ ืฆื• ืึท ื˜ืขืงืข ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ืึท ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง KUBECONFIG.

ื’ืจืึธื‘ืŸ ื“ื™ืคึผืขืจ

ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ื™ืฉื•ื– ื“ื™ืกืงืจื™ื™ื‘ื“ ืžืขืจ ื•ื  ื“ื•ืจืš:

ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ

ื“ืขืจ ืคืขืœื™ืงื™ื™ึทื˜ ืึธื˜ืขืจื™ื™ื–ื“ ื—ืฉื‘ื•ืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืจืขื›ื˜ ืฆื• ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ื“ืขื ืงื ื•ื™ืœ. ืฆื• ื’ืขื‘ืŸ ืคึผืขืจืžื™ืฉืึทื ื–, Kubernetes ื™ืžืคึผืœืึทืžืึทื ืฅ ืึท ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืžืขืงืึทื ื™ื–ืึทื.

ืื™ื™ื“ืขืจ ื•ื•ืขืจืกื™ืข 1.6, Kubernetes ื’ืขื•ื•ื™ื™ื ื˜ ืึท ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ื˜ื™ืคึผ ื’ืขืจื•ืคืŸ ABAC (ืึทื˜ื˜ืจื™ื‘ื™ื•ื˜-ื‘ืื–ื™ืจื˜ ืึทืงืกืขืก ืงืึธื ื˜ืจืึธืœ). ื“ืขื˜ืึทื™ืœืก ื•ื•ืขื’ืŸ ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ. ื“ืขืจ ืฆื•ื’ืึทื ื’ ืื™ื– ื“ืขืจื•ื•ื™ื™ึทืœ ื’ืขืจืขื›ื ื˜ ื•ื•ื™ ืœืขื’ืึทื˜, ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ื ืึธืš ื ื•ืฆืŸ ืขืก ืฆื•ื–ืืžืขืŸ ืื ื“ืขืจืข ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ื˜ื™ื™ืคึผืก.

ื“ื™ ืงืจืึทื ื˜ (ืื•ืŸ ืžืขืจ ืคืœืขืงืกืึทื‘ืึทืœ) ื•ื•ืขื’ ืคื•ืŸ ื“ื™ื•ื•ื™ื™ื“ื™ื ื’ ืึทืงืกืขืก ืจืขื›ื˜ ืฆื• ืึท ืงื ื•ื™ืœ ืื™ื– ื’ืขืจื•ืคืŸ RBAC (ืจืึธืœืข-ื‘ืื–ื™ืจื˜ ืึทืงืกืขืก ืงืึธื ื˜ืจืึธืœ). ืขืก ืื™ื– ื“ืขืจืงืœืขืจื˜ ืกื˜ืึทื‘ื™ืœ ื–ื™ื ื˜ ื•ื•ืขืจืกื™ืข ืงื•ื‘ืขืจื ืขื˜ืขืก 1.8. RBAC ื™ืžืคึผืœืึทืžืึทื ืฅ ืึท ืจืขื›ื˜ ืžืึธื“ืขืœ ืื™ืŸ ื•ื•ืึธืก ืึทืœืฅ ื•ื•ืึธืก ืื™ื– ื ื™ืฉื˜ ื‘ืคื™ืจื•ืฉ ื“ืขืจืœื•ื™ื‘ื˜ ืื™ื– ืคึผืจืึธื•ื›ื™ื‘ืึทื˜ืึทื“.
ืฆื• ื’ืขื‘ืŸ RBAC, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ Kubernetes ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืžื™ื˜ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ --authorization-mode=RBAC. ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื–ืขื ืขืŸ ื‘ืึทืฉื˜ื™ืžื˜ ืื™ืŸ ื“ื™ ื‘ืึทืฉื™ื™ึทืžืคึผืขืจืœืขืš ืžื™ื˜ ื“ื™ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ื•ื•ืึธืก ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื™ื– ืœื™ื’ืŸ ืื•ื™ืฃ ื“ืขื ื“ืจืš /etc/kubernetes/manifests/kube-apiserver.yaml, ืื™ืŸ ืึธืคึผื˜ื™ื™ืœื•ื ื’ command. ืึธื‘ืขืจ, RBAC ืื™ื– ืฉื•ื™ืŸ ืขื ื™ื™ื‘ืึทืœื“ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ืึทื–ื•ื™ ืจื•ื‘ึฟ ืžืกืชึผืžื ืื™ืจ ื–ืึธืœ ื ื™ืฉื˜ ื–ืึธืจื’ ื•ื•ืขื’ืŸ ืื™ื: ืื™ืจ ืงืขื ืขืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ืขื ื“ื•ืจืš ื“ื™ ื•ื•ืขืจื˜ authorization-mode (ืื™ืŸ ื“ื™ ืฉื•ื™ืŸ ื“ืขืจืžืื ื˜ kube-apiserver.yaml). ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืฆื•ื•ื™ืฉืŸ ื“ื™ ืžื™ื ื™ื ื’ื– ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืื ื“ืขืจืข ื˜ื™ื™ืคึผืก ืคื•ืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ (node, webhook, always allow), ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ืœืึธื–ืŸ ื–ื™ื™ืขืจ ื‘ืึทื˜ืจืึทื›ื˜ื•ื ื’ ืึทืจื•ื™ืก ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืžืึทื˜ืขืจื™ืึทืœ.

ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืืจื•ื™ืก ืึทืจื˜ื™ืงืœ ืžื™ื˜ ืึท ื’ืึทื ืฅ ื“ื™ื˜ื™ื™ืœื“ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืื•ืŸ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ RBAC, ืึทื–ื•ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืื™ืš ื•ื•ืขืœ ื‘ืึทื’ืจืขื ืขืฆืŸ ื–ื™ืš ืฆื• ืึท ืงื•ืจืฅ ืจืฉื™ืžื” ืคื•ืŸ ื“ื™ ื‘ืึทืกื™ืงืก ืื•ืŸ ื‘ื™ื™ืฉืคื™ืœืŸ.

ื“ื™ ืคืืœื’ืขื ื“ืข ืึทืคึผื™ ืขื ื˜ื™ื˜ื™ื– ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึทืงืกืขืก ืื™ืŸ Kubernetes ื“ื•ืจืš RBAC:

  • Role ะธ ClusterRole - ืจืึธืœืขืก ื•ื•ืึธืก ื“ื™ื ืขืŸ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืึทืงืกืขืก ืจืขื›ื˜:
  • Role ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืจืขื›ื˜ ืื™ืŸ ืึท ื ืึธืžืขืŸ ืคึผืœืึทืฅ;
  • ClusterRole - ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืฆื• ืงื ื•ื™ืœ-ืกืคึผืขืฆื™ืคื™ืฉ ืึทื‘ื“ื–ืฉืขืงืฅ ืึทื–ืึท ื•ื•ื™ ื ืึธื•ื“ื–, ื ื™ื˜-ืจืขืกื•ืจืกืŸ URL ืก (ื“"ื” ื ื™ื˜ ืฉื™ื™ึทื›ื•ืช ืฆื• Kubernetes ืจืขืกื•ืจืกืŸ - ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, /version, /logs, /api*);
  • RoleBinding ะธ ClusterRoleBinding - ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ื‘ื™ื™ื ื“ื™ื ื’ Role ะธ ClusterRole ืฆื• ืึท ื‘ืึทื ื™ืฆืขืจ, ื‘ืึทื ื™ืฆืขืจ ื’ืจื•ืคึผืข ืึธื“ืขืจ ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ื˜.

ื“ื™ ืจืึธืœืข ืื•ืŸ ืจืึธืœืขื‘ื™ื ื“ื™ื ื’ ืขื ื˜ื™ื˜ื™ื– ื–ืขื ืขืŸ ืœื™ืžื™ื˜ืขื“ ื“ื•ืจืš ื ืึทืžืขืกืคึผืึทืกืข, ื™.ืข. ืžื•ื–ืŸ ื–ื™ื™ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื ืึธืžืขืŸ ืคึผืœืึทืฅ. ืึธื‘ืขืจ, ืึท ืจืึธืœืขื‘ื™ื ื“ื™ื ื’ ืงืขื ืขืŸ ื“ืขืจืžืึธื ืขืŸ ืึท ClusterRole, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉืึทืคึฟืŸ ืึท ืกื›ื•ื ืคื•ืŸ ื“ื–ืฉืึทื ืขืจื™ืง ืคึผืขืจืžื™ืฉืึทื ื– ืื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึทืงืกืขืก ื ื™ืฆืŸ ื–ื™ื™.

ืจืึธืœืขืก ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืจืขื›ื˜ ื ื™ืฆืŸ ืกืขื˜ืึทืœื– ืคื•ืŸ ื›ึผืœืœื™ื ืžื™ื˜:

  • ืึทืคึผื™ ื’ืจื•ืคึผืขืก - ื–ืขืŸ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ื•ืจืš ืึทืคึผื™ื’ืจื•ืคึผืก ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜ kubectl api-resources;
  • ืจืขืกื•ืจืกืŸ (ืจืขืกื•ืจืกืŸ: pod, namespace, deployment ืื•ืŸ ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ.);
  • ื•ื•ืขืจื‘ืก (ื•ื•ืขืจื‘ื–: set, update ืื•ืŸ ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ.).
  • ืžื™ื˜ืœ ื ืขืžืขืŸ (resourceNames) - ืคึฟืึทืจ ื“ื™ ืคืึทืœ ื•ื•ืขืŸ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฆื•ืฉื˜ืขืœืŸ ืึทืงืกืขืก ืฆื• ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืžื™ื˜ืœ, ืื•ืŸ ื ื™ื˜ ืึทืœืข ืจืขืกื•ืจืกืŸ ืคื•ืŸ ื“ืขื ื˜ื™ืคึผ.

ื ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืื™ืŸ Kubernetes ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื•ื™ืฃ ื“ืขื ื‘ืœืึทื˜ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ. ืึทื ืฉื˜ืึธื˜ (ืึธื“ืขืจ ื‘ืขืกืขืจ, ืื™ืŸ ื“ืขืจืฆื• ืฆื• ื“ืขื), ืื™ืš ื•ื•ืขืœ ื’ืขื‘ืŸ ื‘ื™ื™ืฉืคื™ืœืŸ ื•ื•ืึธืก ืื™ืœื•ืกื˜ืจื™ืจืŸ ืื™ืจ ืึทืจื‘ืขื˜.

ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ RBAC ืขื ื˜ื™ื˜ื™ื–

ืคึผืฉื•ื˜ Role, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืื•ืŸ ืกื˜ืึทื˜ื•ืก ืคื•ืŸ ืคึผืึธื“ืก ืื•ืŸ ืžืึธื ื™ื˜ืึธืจ ื–ื™ื™ ืื™ืŸ ื“ื™ ื ืึทืžืขืกืคึผืึทืกืข target-namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: target-namespace
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

ื‘ื™ื™ึทืฉืคึผื™ืœ ClusterRole, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืื•ืŸ ืกื˜ืึทื˜ื•ืก ืคื•ืŸ ืคึผืึธื“ืก ืื•ืŸ ืžืึธื ื™ื˜ืึธืจ ื–ื™ื™ ืื™ื‘ืขืจ ื“ื™ ืงื ื•ื™ืœ:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # ัะตะบั†ะธะธ "namespace" ะฝะตั‚, ั‚ะฐะบ ะบะฐะบ ClusterRole ะทะฐะดะตะนัั‚ะฒัƒะตั‚ ะฒะตััŒ ะบะปะฐัั‚ะตั€
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

ื‘ื™ื™ึทืฉืคึผื™ืœ RoleBinding, ื•ื•ืึธืก ืึทืœืึทื•ื– ื“ื™ ื‘ืึทื ื™ืฆืขืจ mynewuser "ืœื™ื™ืขื ืขืŸ" ืคึผืึธื“ืก ืื™ืŸ ื ืึธืžืขืŸ ืกืคึผื™ื™ืก my-namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: target-namespace
subjects:
- kind: User
  name: mynewuser # ะธะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะทะฐะฒะธัะธะผะพ ะพั‚ ั€ะตะณะธัั‚ั€ะฐ!
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role # ะทะดะตััŒ ะดะพะปะถะฝะพ ะฑั‹ั‚ัŒ โ€œRoleโ€ ะธะปะธ โ€œClusterRoleโ€
  name: pod-reader # ะธะผั Role, ั‡ั‚ะพ ะฝะฐั…ะพะดะธั‚ัั ะฒ ั‚ะพะผ ะถะต namespace,
                   # ะธะปะธ ะธะผั ClusterRole, ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะบะพั‚ะพั€ะพะน
                   # ั…ะพั‚ะธะผ ั€ะฐะทั€ะตัˆะธั‚ัŒ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŽ
  apiGroup: rbac.authorization.k8s.io

ื’ืขืฉืขืขื ื™ืฉ ืงืึธื ื˜ืจืึธืœื™ืจืŸ

ืกื˜ืฉืขืžืึทื˜ื™ืงืึทืœืœื™, ื“ื™ Kubernetes ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจืขืคึผืจื™ื–ืขื ื˜ื™ื“ ื•ื•ื™ ื’ื™ื™ื˜:

ื“ื™ ืึทื‘ืง ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก: ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ, ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ืึทื•ื“ื™ื˜ื™ื ื’

ื“ืขืจ ืฉืœื™ืกืœ Kubernetes ืงืึธืžืคึผืึธื ืขื ื˜ ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืคึผืจืึทืกืขืกื™ื ื’ ืจื™ืงื•ื•ืขืก ืื™ื– ืึทืคึผื™-ืกืขืจื•ื•ืขืจ. ืึทืœืข ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืื•ื™ืฃ ื“ืขื ืงื ื•ื™ืœ ื’ื™ื™ืŸ ื“ื•ืจืš ืขืก. ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ื“ื™ ื™ื ืขืจืœืขืš ืžืขืงืึทื ื™ื–ืึทืžื– ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ "ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ืื™ืŸ Kubernetes ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ kubectl run?'.

ืกื™ืกื˜ืขื ืึทื“ืึทื˜ื™ื ื’ ืื™ื– ืึท ื˜ืฉื™ืงืึทื•ื•ืข ืฉื˜ืจื™ืš ืื™ืŸ Kubernetes, ื•ื•ืึธืก ืื™ื– ืคืึทืจืงืจื™ืคึผืœื˜ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜. ืขืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืงืœืึธืฅ ืึทืœืข ืงืึทืœืœืก ืฆื• ื“ื™ Kubernetes API. ื•ื•ื™ ืื™ืจ ืงืขืŸ ื˜ืจืขืคืŸ, ืึทืœืข ืึทืงืฉืึทื ื– ืฉื™ื™ึทื›ื•ืช ืฆื• ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืื•ืŸ ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงื ื•ื™ืœ ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ื•ืจืš ื“ืขื ืึทืคึผื™. ื ื’ื•ื˜ืข ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื–ื™ื™ึทืŸ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืงืขื ืขืŸ (ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš) ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ K8s. ื•ื•ื™ื™ึทื˜ืขืจ, ืื™ืš ื•ื•ืขืœ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคืึธืจืฉื˜ืขืœืŸ ื“ื™ ื˜ืขืžืข ืื™ืŸ ืึท ืกื™ืžืคึผืœืขืจ ืฉืคึผืจืึทืš.

ืื–ื•ื™, ืฆื• ื’ืขื‘ืŸ ืึทื“ืึทื˜ื™ื ื’, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึธืจืŸ ื“ืจื™ื™ ืคืืจืœืื ื’ื˜ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืฆื• ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ืŸ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ, ื•ื•ืึธืก ื–ืขื ืขืŸ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ ืื•ื ื˜ืŸ:

  • --audit-policy-file=/etc/kubernetes/policies/audit-policy.yaml
  • --audit-log-path=/var/log/kube-audit/audit.log
  • --audit-log-format=json

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื“ื™ ื“ืจื™ื™ ื ื™ื™ื˜ื™ืง ืคึผืึทืจืึทืžืขื˜ืขืจืก, ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ื ืึธืš ืกืขื˜ื˜ื™ื ื’ืก ืฉื™ื™ึทื›ื•ืช ืฆื• ืึทื“ืึทื˜ื™ื ื’: ืคึฟื•ืŸ ืงืœืึธืฅ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ ืฆื• ื•ื•ืขื‘ื”ืึธืึธืง ื“ื™ืกืงืจื™ืคึผืฉืึทื ื–. ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืงืœืึธืฅ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก:

  • --audit-log-maxbackup=10
  • --audit-log-maxsize=100
  • --audit-log-maxage=7

ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื•ื•ื•ื™ื ืขืŸ ืื•ื™ืฃ ื–ื™ื™ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ - ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืึทืœืข ื“ื™ ื“ืขื˜ืึทื™ืœืก ืื™ืŸ kube-apiserver ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ื•ื•ื™ ืฉื•ื™ืŸ ื“ืขืจืžืื ื˜, ืึทืœืข ืคึผืึทืจืึทืžืขื˜ืขืจืก ื–ืขื ืขืŸ ื‘ืึทืฉื˜ื™ืžื˜ ืื™ืŸ ื“ื™ ืžืึทื ืึทืคืขืกื˜ื™ื™ืฉืึทืŸ ืžื™ื˜ ื“ื™ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ (ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ /etc/kubernetes/manifests/kube-apiserver.yaml), ืื™ืŸ ืึธืคึผื˜ื™ื™ืœื•ื ื’ command. ืœืึธืžื™ืจ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื“ื™ 3 ืคืืจืœืื ื’ื˜ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืื•ืŸ ืึทื ืึทืœื™ื™ื– ื–ื™ื™:

  1. audit-policy-file - ื“ืจืš ืฆื• ื“ื™ YAML ื˜ืขืงืข ื“ื™ืกืงืจื™ื™ื‘ื™ื ื’ ื“ื™ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืึธืœื™ื˜ื™ืง. ืžื™ืจ ื•ื•ืขืœืŸ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื–ื™ื™ืŸ ืื™ื ื”ืึทืœื˜ ืฉืคึผืขื˜ืขืจ, ืึธื‘ืขืจ ืื™ืฆื˜ ืื™ืš ื•ื•ืขืœ ื˜ืึธืŸ ืึทื– ื“ื™ ื˜ืขืงืข ืžื•ื–ืŸ ื–ื™ื™ืŸ ืœื™ื™ื ืขื•ื•ื“ื™ืง ื“ื•ืจืš ื“ื™ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืคึผืจืึธืฆืขืก. ื“ืขืจื™ื‘ืขืจ, ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืึธื ืงืœืึทืคึผืŸ ืขืก ื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืคึฟืึทืจ ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึธื“ ืฆื• ื“ื™ ืฆื•ื ืขืžืขืŸ ืกืขืงืฉืึทื ื– ืคื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ:
      volumeMounts:
        - mountPath: /etc/kubernetes/policies
          name: policies
          readOnly: true
      volumes:
      - hostPath:
          path: /etc/kubernetes/policies
          type: DirectoryOrCreate
        name: policies
  2. audit-log-path - ื“ืจืš ืฆื• ื“ื™ ืงืœืึธืฅ ื˜ืขืงืข. ื“ืขืจ ื“ืจืš ืžื•ื–ืŸ ืื•ื™ืš ื–ื™ื™ืŸ ืฆื•ื˜ืจื™ื˜ืœืขืš ืฆื• ื“ื™ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืคึผืจืึธืฆืขืก, ืึทื–ื•ื™ ืžื™ืจ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ึทืŸ ืžืึทื•ื ื˜ื™ื ื’ ืื•ื™ืฃ ื“ื™ ื–ืขืœื‘ืข ื•ื•ืขื’:
      volumeMounts:
        - mountPath: /var/log/kube-audit
          name: logs
          readOnly: false
      volumes:
      - hostPath:
          path: /var/log/kube-audit
          type: DirectoryOrCreate
        name: logs
  3. audit-log-format - ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืœืึธื’ ืคึฟืึธืจืžืึทื˜. ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืื™ื– json, ืึธื‘ืขืจ ื“ื™ ืœืขื’ืึทื˜ ื˜ืขืงืกื˜ ืคึฟืึธืจืžืึทื˜ ืื™ื– ืื•ื™ืš ื‘ื ื™ืžืฆื (legacy).

ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืึธืœื™ื˜ื™ืง

ืื™ืฆื˜ ื•ื•ืขื’ืŸ ื“ื™ ื“ืขืจืžืื ื˜ ื˜ืขืงืข ื“ื™ืกืงืจื™ื™ื‘ื™ื ื’ ื“ื™ ืœืึธื’ื™ื ื’ ืคึผืึธืœื™ื˜ื™ืง. ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ืึทื’ืจื™ืฃ ืคื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืึธืœื™ื˜ื™ืง ืื™ื– level, ืœืึธื’ื™ื ื’ ืžื“ืจื’ื”. ื–ื™ื™ ื–ืขื ืขืŸ ื•ื•ื™ ื’ื™ื™ื˜:

  • None - ื˜ืึธืŸ ื ื™ื˜ ืงืœืึธืฅ;
  • Metadata - ืงืœืึธืฅ ื‘ืขื˜ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท: ื‘ืึทื ื™ืฆืขืจ, ื‘ืขื˜ืŸ ืฆื™ื™ื˜, ืฆื™ืœ ืžื™ื˜ืœ (ืคึผืึธื“, ื ืึทืžืขืกืคึผืึทืกืข, ืืื–"ื• ื•), ืงืึทืžืฃ ื˜ื™ืคึผ (ื•ื•ืขืจื‘), ืืื–"ื• ื•;
  • Request - ืงืœืึธืฅ ืžืขื˜ืึทื“ืึทื˜ืึท ืื•ืŸ ื‘ืขื˜ืŸ ื’ื•ืฃ;
  • RequestResponse - ืงืœืึธืฅ ืžืขื˜ืึทื“ืึทื˜ืึท, ื‘ืขื˜ืŸ ื’ื•ืฃ ืื•ืŸ ืขื ื˜ืคืขืจ ื’ื•ืฃ.

ื“ื™ ืœืขืฆื˜ืข ืฆื•ื•ื™ื™ ืœืขื•ื•ืขืœืก (Request ะธ RequestResponse) ื˜ืึธืŸ ื ื™ื˜ ืงืœืึธืฅ ืจื™ืงื•ื•ืขืก ื•ื•ืึธืก ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืึทืงืกืขืก ืจืขืกื•ืจืกืŸ (ืึทืงืกืขืกืึทื– ืฆื• ืึทื–ื•ื™ ื’ืขืจื•ืคืขื ืข ื ื™ื˜-ืจืขืกื•ืจืกืŸ URL).

ืื•ื™ืš ืึทืœืข ืจื™ืงื•ื•ืขืก ื’ื™ื™ืŸ ื“ื•ืจืš ืขื˜ืœืขื›ืข ืกื˜ืึทื’ืขืก:

  • RequestReceived - ื“ืขืจ ื‘ื™ื ืข ื•ื•ืขืŸ ื“ื™ ื‘ืงืฉื” ืื™ื– ื‘ืืงื•ืžืขืŸ ื“ื•ืจืš ื“ื™ ืคึผืจืึทืกืขืกืขืจ ืื•ืŸ ืื™ื– ื ืึธืš ื ื™ืฉื˜ ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ื•ื•ื™ื™ึทื˜ืขืจ ืฆื•ื–ืืžืขืŸ ื“ื™ ืงื™ื™ื˜ ืคื•ืŸ ืคึผืจืึทืกืขืกืขืจื–;
  • ResponseStarted - ืขื ื˜ืคืขืจ ื›ืขื“ืขืจื– ื–ืขื ืขืŸ ื’ืขืฉื™ืงื˜, ืึธื‘ืขืจ ืื™ื™ื“ืขืจ ื“ื™ ืขื ื˜ืคืขืจ ื’ื•ืฃ ืื™ื– ื’ืขืฉื™ืงื˜. ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืคึฟืึทืจ ืœืึทื ื’-ืœื•ื™ืคืŸ ืคึฟืจืื’ืŸ (ืœืžืฉืœ, watch);
  • ResponseComplete - ื“ืขืจ ืขื ื˜ืคืขืจ ื’ื•ืฃ ืื™ื– ื’ืขืฉื™ืงื˜, ืงื™ื™ืŸ ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉื™ืงื˜;
  • Panic - ื’ืขืฉืขืขื ื™ืฉืŸ ื–ืขื ืขืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื•ื•ืขืŸ ืึท ืึทื‘ื ืึธืจืžืึทืœ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ื“ื™ื˜ืขืงื˜ืึทื“.

ืฆื• ื”ืึธืคึผืงืขืŸ ืงื™ื™ืŸ ืกื˜ืขืคึผืก ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ omitStages.

ืื™ืŸ ืึท ืคึผืึธืœื™ื˜ื™ืง ื˜ืขืงืข, ืžื™ืจ ืงืขื ืขืŸ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืขื˜ืœืขื›ืข ืกืขืงืฉืึทื ื– ืžื™ื˜ ืคืึทืจืฉื™ื“ืขื ืข ืœืึธื’ื™ื ื’ ืœืขื•ื•ืขืœืก. ื“ืขืจ ืขืจืฉื˜ืขืจ ื•ื•ืึธืก ืจื™ื›ื˜ืŸ ื”ืขืจืฉืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื“ื™ ืคึผืึธืœื™ื˜ื™ืง ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ืขื ื“ื˜.

ื“ื™ ืงื•ื‘ืขืœืขื˜ ื“ื™ื™ืžืึทืŸ ืžืึธื ื™ื˜ืึธืจืก ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ ื‘ืึทืฉื™ื™ึทืžืคึผืขืจืœืขืš ืžื™ื˜ ื“ื™ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ, ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ื“ื™ื˜ืขืงื˜ืึทื“, ืจื™ืกื˜ืึทืจื˜ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ. ืื‘ืขืจ ืขืก ืื™ื– ืึท ื•ื•ื™ื›ื˜ื™ืง ื“ืขื˜ืึทืœ: ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ ืคึผืึธืœื™ื˜ื™ืง ื˜ืขืงืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ื’ื ืึธืจื™ืจื˜ ื“ื•ืจืš ืขืก. ื ืึธืš ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ื“ื™ ืคึผืึธืœื™ื˜ื™ืง ื˜ืขืงืข, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจื™ืกื˜ืึทืจื˜ ื“ื™ ืึทืคึผื™ ืกืขืจื•ื•ืขืจ ืžืึทื ื™ื•ืึทืœื™. ื–ื™ื ื˜ ืึทืคึผื™-ืกืขืจื•ื•ืขืจ ืื™ื– ืกื˜ืึทืจื˜ืขื“ ื•ื•ื™ ืกื˜ืึทื˜ื™ืง ืคึผืึธื“, ืžืึทื ืฉืึทืคึฟื˜ kubectl delete ื•ื•ืขื˜ ื ื™ืฉื˜ ืคืึทืจืฉืึทืคืŸ ืขืก ืฆื• ืจื™ืกื˜ืึทืจื˜. ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ ืขืก ืžืึทื ื™ื•ืึทืœื™ docker stop ืื•ื™ืฃ ืงื•ื‘ืข-ืžืึทืกื˜ืขืจืก, ื•ื•ื• ื“ื™ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืึธืœื™ื˜ื™ืง ืื™ื– ื’ืขื‘ื™ื˜ืŸ:

docker stop $(docker ps | grep k8s_kube-apiserver | awk '{print $1}')

ื•ื•ืขืŸ ืขื ื™ื™ื‘ืึทืœื™ื ื’ ืึทื“ืึทื˜ื™ื ื’, ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ื’ืขื“ืขื ืงืขืŸ ืึทื– ื“ื™ ืžืึทืกืข ืื•ื™ืฃ ืงื•ื‘-ืึทืคึผื™ืกืขืจื•ื•ืขืจ ื™ื ืงืจื™ืกื™ื–. ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ื–ื™ืงืึธืจืŸ ืงืึทื ืกืึทืžืฉืึทืŸ ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ ื‘ืขื˜ืŸ ืงืึธื ื˜ืขืงืกื˜ ื™ื ืงืจื™ืกื™ื–. ืœืึธื’ื™ื ื’ ื”ื™ื™ื‘ื˜ ื–ื™ืš ื‘ืœื•ื™ื– ื ืึธืš ื“ื™ ืขื ื˜ืคืขืจ ื›ืขื“ืขืจ ืื™ื– ื’ืขืฉื™ืงื˜. ื“ื™ ืžืึทืกืข ืื•ื™ืš ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื“ื™ ืงืึธื ื˜ืจืึธืœ ืคึผืึธืœื™ื˜ื™ืง ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ืคึผืึทืœืึทืกื™ื–

ื–ืืœ ืก ืงื•ืง ืื™ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืคื•ืŸ ืคึผืึธืœื™ื˜ื™ืง ื˜ืขืงืขืก ื ื™ืฆืŸ ื‘ื™ื™ืฉืคื™ืœืŸ.

ื“ืึธ ืื™ื– ืึท ืคึผืฉื•ื˜ ื˜ืขืงืข policyืฆื• ืงืœืึธืฅ ืึทืœืฅ ืื•ื™ืฃ ื“ืขืจ ืžื“ืจื’ื” Metadata:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata

ืื™ืŸ ืคึผืึธืœื™ื˜ื™ืง ืื™ืจ ืงืขื ืขืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื ื™ืฆืขืจืก (Users ะธ ServiceAccounts) ืื•ืŸ ื‘ืึทื ื™ืฆืขืจ ื’ืจื•ืคึผืขืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ืึธืก ืื™ื– ื•ื•ื™ ืžื™ืจ ืื™ื’ื ืึธืจื™ืจืŸ ืกื™ืกื˜ืขื ื ื™ืฆืขืจืก, ืึธื‘ืขืจ ืงืœืึธืฅ ืึทืœืฅ ืึทื ื“ืขืจืฉ ืื•ื™ืฃ ื“ืขืจ ืžื“ืจื’ื” Request:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: None
    userGroups:
      - "system:serviceaccounts"
      - "system:nodes"
    users:
      - "system:anonymous"
      - "system:apiserver"
      - "system:kube-controller-manager"
      - "system:kube-scheduler"
  - level: Request

ืขืก ืื™ื– ืื•ื™ืš ืžืขื’ืœืขืš ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื˜ืึทืจื’ืึทืฅ:

  • ื ืึธืžืขืŸ ืกืคึผื™ื™ืกืึทื– (namespaces);
  • ื•ื•ืขืจื‘ืก (ื•ื•ืขืจื‘ื–: get, update, delete ืื•ืŸ ืื ื“ืขืจืข);
  • ืจืขืกื•ืจืกืŸ (ืจืขืกื•ืจืกืŸ, ื ื™ื™ืžืœื™: pod, configmaps ืืื–"ื• ื•) ืื•ืŸ ืžื™ื˜ืœ ื’ืจื•ืคึผืขืก (apiGroups).

ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜! ืจืขืกืึธื•ืจืกืขืก ืื•ืŸ ืžื™ื˜ืœ ื’ืจื•ืคึผืขืก (ืึทืคึผื™ ื’ืจื•ืคึผืขืก, ื“"ื” ืึทืคึผื™ื’ืจืึธื•ืคึผืก), ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื–ื™ื™ืขืจ ื•ื•ืขืจืกื™ืขืก ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ, ืงืขื ืขืŸ ื–ื™ื™ืŸ ื‘ืืงื•ืžืขืŸ ืžื™ื˜ ื“ื™ ืงืึทืžืึทื ื“ื–:

kubectl api-resources
kubectl api-versions

ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืึธืœื™ื˜ื™ืง ืื™ื– ืฆื•ื’ืขืฉื˜ืขืœื˜ ื•ื•ื™ ืึท ื“ืขืžืึทื ืกื˜ืจื™ื™ืฉืึทืŸ ืคื•ืŸ ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ื™ืกื™ื– ืื™ืŸ ืึทืœื™ื‘ืึทื‘ืึท ืงืœืึธื•ื“ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ:

apiVersion: audit.k8s.io/v1beta1
kind: Policy
# ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ัั‚ะฐะดะธัŽ RequestReceived
omitStages:
  - "RequestReceived"
rules:
  # ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ัะพะฑั‹ั‚ะธั, ัั‡ะธั‚ะฐัŽั‰ะธะตัั ะผะฐะปะพะทะฝะฐั‡ะธั‚ะตะปัŒะฝั‹ะผะธ ะธ ะฝะต ะพะฟะฐัะฝั‹ะผะธ:
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
      - group: "" # ัั‚ะพ api group ั ะฟัƒัั‚ั‹ะผ ะธะผะตะฝะตะผ, ะบ ะบะพั‚ะพั€ะพะผัƒ ะพั‚ะฝะพััั‚ัั
                  # ะฑะฐะทะพะฒั‹ะต ั€ะตััƒั€ัั‹ Kubernetes, ะฝะฐะทั‹ะฒะฐะตะผั‹ะต โ€œcoreโ€
        resources: ["endpoints", "services"]
  - level: None
    users: ["system:unsecured"]
    namespaces: ["kube-system"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["configmaps"]
  - level: None
    users: ["kubelet"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes"]
  - level: None
    userGroups: ["system:nodes"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes"]
  - level: None
    users:
      - system:kube-controller-manager
      - system:kube-scheduler
      - system:serviceaccount:kube-system:endpoint-controller
    verbs: ["get", "update"]
    namespaces: ["kube-system"]
    resources:
      - group: "" # core
        resources: ["endpoints"]
  - level: None
    users: ["system:apiserver"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["namespaces"]
  # ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ะพะฑั€ะฐั‰ะตะฝะธั ะบ read-only URLs:
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธั, ะพั‚ะฝะพััั‰ะธะตัั ะบ ั‚ะธะฟัƒ ั€ะตััƒั€ัะพะฒ โ€œัะพะฑั‹ั‚ะธัโ€:
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # ะ ะตััƒั€ัั‹ ั‚ะธะฟะฐ Secret, ConfigMap ะธ TokenReview ะผะพะณัƒั‚ ัะพะดะตั€ะถะฐั‚ัŒ  ัะตะบั€ะตั‚ะฝั‹ะต ะดะฐะฝะฝั‹ะต,
  # ะฟะพัั‚ะพะผัƒ ะปะพะณะธั€ัƒะตะผ ั‚ะพะปัŒะบะพ ะผะตั‚ะฐะดะฐะฝะฝั‹ะต ัะฒัะทะฐะฝะฝั‹ั… ั ะฝะธะผะธ ะทะฐะฟั€ะพัะพะฒ
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
  # ะ”ะตะนัั‚ะฒะธั ั‚ะธะฟะฐ get, list ะธ watch ะผะพะณัƒั‚ ะฑั‹ั‚ัŒ ั€ะตััƒั€ัะพั‘ะผะบะธะผะธ; ะฝะต ะปะพะณะธั€ัƒะตะผ ะธั…
  - level: Request
    verbs: ["get", "list", "watch"]
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
  # ะฃั€ะพะฒะตะฝัŒ ะปะพะณะธั€ะพะฒะฐะฝะธั ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะดะปั ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ั… ั€ะตััƒั€ัะพะฒ API
  - level: RequestResponse
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
  # ะฃั€ะพะฒะตะฝัŒ ะปะพะณะธั€ะพะฒะฐะฝะธั ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะดะปั ะฒัะตั… ะพัั‚ะฐะปัŒะฝั‹ั… ะทะฐะฟั€ะพัะพะฒ
  - level: Metadata

ืืŸ ืื ื“ืขืจ ื’ื•ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืึธืœื™ื˜ื™ืง ืื™ื– ืคึผืจืึธืคื™ืœ ื’ืขื ื™ืฆื˜ ืื™ืŸ GCE.

ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืจื™ืกืคึผืึทื ื“ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื’ืขืฉืขืขื ื™ืฉืŸ, ืขืก ืื™ื– ืžืขื’ืœืขืš ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื•ื•ืขื‘ื”ืึธืึธืง. ื“ืขื ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื™ื– ื‘ืื“ืขืงื˜ ืื™ืŸ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ, ืื™ืš ื•ื•ืขื˜ ืœืึธื–ืŸ ืขืก ืึทืจื•ื™ืก ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ื“ืขืจ ืึทืจื˜ื™ืงืœ ื’ื™ื˜ ืึทืŸ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ื™ืงืขืจื“ื™ืง ื–ื™ื›ืขืจื”ื™ื™ื˜ ืžืขืงืึทื ื™ื–ืึทืžื– ืื™ืŸ Kubernetes ืงืœืึทืกื˜ืขืจื–, ื•ื•ืึธืก ืœืึธื–ืŸ ืื™ืจ ืฆื• ืฉืึทืคึฟืŸ ืคืขืจื–ืขื ืœื™ื›ืขืŸ ื‘ืึทื ื™ืฆืขืจ ืึทืงืึทื•ื ืฅ, ื‘ืึทื–ื•ื ื“ืขืจ ื–ื™ื™ืขืจ ืจืขื›ื˜ ืื•ืŸ ืจืขืงืึธืจื“ื™ืจืŸ ื–ื™ื™ืขืจ ืึทืงืฉืึทื ื–. ืื™ืš ื”ืึธืคึฟืŸ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื–ืขื ืขืŸ ืคื™ื™ืกื˜ ืžื™ื˜ ืึทื–ืึท ื™ืฉื•ื– ืื™ืŸ ื˜ืขืึธืจื™ืข ืึธื“ืขืจ ืื™ืŸ ืคื™ืจ. ืื™ืš ืื•ื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืื™ืจ ืœื™ื™ืขื ืขืŸ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ืื ื“ืขืจืข ืžืึทื˜ืขืจื™ืึทืœืก ืื•ื™ืฃ ื“ืขืจ ื˜ืขืžืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื™ืŸ Kubernetes, ื•ื•ืึธืก ืื™ื– ื’ืขื’ืขื‘ืŸ ืื™ืŸ "ืคึผืก" - ื˜ืึธืžืขืจ ืฆื•ื•ื™ืฉืŸ ื–ื™ื™ ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื ื™ื™ื˜ื™ืง ื“ืขื˜ืึทื™ืœืก ื•ื•ืขื’ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขืžืก ื•ื•ืึธืก ื–ืขื ืขืŸ ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ืคึฟืึทืจ ืื™ืจ.

ืคึผืก

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’