ื”-ABC ืฉืœ ืื‘ื˜ื—ื” ื‘-Kubernetes: ืื™ืžื•ืช, ื”ืจืฉืื”, ื‘ื™ืงื•ืจืช

ื”-ABC ืฉืœ ืื‘ื˜ื—ื” ื‘-Kubernetes: ืื™ืžื•ืช, ื”ืจืฉืื”, ื‘ื™ืงื•ืจืช

ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ, ื‘ื”ืคืขืœืช ื›ืœ ืžืขืจื›ืช, ืขื•ืœื” ืกื•ื’ื™ื™ืช ื”ืื‘ื˜ื—ื”: ื”ื‘ื˜ื—ืช ืื™ืžื•ืช, ื”ืคืจื“ืช ื–ื›ื•ื™ื•ืช, ื‘ื™ืงื•ืจืช ื•ืžืฉื™ืžื•ืช ื ื•ืกืคื•ืช. ื›ื‘ืจ ื ื•ืฆืจ ืขื‘ื•ืจ Kubernetes ืคืชืจื•ื ื•ืช ืจื‘ื™ื, ื”ืžืืคืฉืจื™ื ืœืš ืœื”ืฉื™ื’ ืขืžื™ื“ื” ื‘ืชืงื ื™ื ื’ื ื‘ืกื‘ื™ื‘ื•ืช ืชื•ื‘ืขื ื™ื•ืช ืžืื•ื“... ืื•ืชื• ื—ื•ืžืจ ืžื•ืงื“ืฉ ืœื”ื™ื‘ื˜ื™ื ื”ื‘ืกื™ืกื™ื™ื ืฉืœ ืื‘ื˜ื—ื” ื”ืžื™ื•ืฉืžื™ื ื‘ืชื•ืš ื”ืžื ื’ื ื•ื ื™ื ื”ืžื•ื‘ื ื™ื ืฉืœ ื”-K8s. ืงื•ื“ื ื›ืœ, ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืœืžื™ ืฉืžืชื—ื™ืœ ืœื”ื›ื™ืจ ืืช Kubernetes - ื›ื ืงื•ื“ืช ืžื•ืฆื ืœืœื™ืžื•ื“ ื ื•ืฉืื™ื ื”ืงืฉื•ืจื™ื ืœืื‘ื˜ื—ื”.

ืื™ืžื•ืช

ื™ืฉื ื ืฉื ื™ ืกื•ื’ื™ ืžืฉืชืžืฉื™ื ื‘-Kubernetes:

  • ื—ืฉื‘ื•ื ื•ืช ืฉื™ืจื•ืช - ื—ืฉื‘ื•ื ื•ืช ื”ืžื ื•ื”ืœื™ื ืขืœ ื™ื“ื™ Kubernetes API;
  • ืžืฉืชืžืฉ - ืžืฉืชืžืฉื™ื "ืจื’ื™ืœื™ื" ื”ืžื ื•ื”ืœื™ื ืขืœ ื™ื“ื™ ืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื ื•ื‘ืœืชื™ ืชืœื•ื™ื™ื.

ื”ื”ื‘ื“ืœ ื”ืขื™ืงืจื™ ื‘ื™ืŸ ื”ืกื•ื’ื™ื ื”ืœืœื• ื”ื•ื ืฉืขื‘ื•ืจ ื—ืฉื‘ื•ื ื•ืช ืฉื™ืจื•ืช ื™ืฉื ื ืื•ื‘ื™ื™ืงื˜ื™ื ืžื™ื•ื—ื“ื™ื ื‘-Kubernetes API (ื”ื ื ืงืจืื™ื ื›ืš - ServiceAccounts), ืฉืงืฉื•ืจื™ื ืœืžืจื—ื‘ ืฉืžื•ืช ื•ืœืกื˜ ืฉืœ ื ืชื•ื ื™ ื”ืจืฉืื” ื”ืžืื•ื—ืกื ื™ื ื‘ืืฉื›ื•ืœ ื‘ืื•ื‘ื™ื™ืงื˜ื™ื ืžืกื•ื’ Secrets. ืžืฉืชืžืฉื™ื ื›ืืœื” (ื—ืฉื‘ื•ื ื•ืช ืฉื™ืจื•ืช) ืžื™ื•ืขื“ื™ื ื‘ืขื™ืงืจ ืœื ื”ืœ ื–ื›ื•ื™ื•ืช ื’ื™ืฉื” ืœ-Kubernetes API ืฉืœ ืชื”ืœื™ื›ื™ื ื”ืคื•ืขืœื™ื ื‘ืืฉื›ื•ืœ Kubernetes.

ืœืžืฉืชืžืฉื™ื ืจื’ื™ืœื™ื ืื™ืŸ ืขืจื›ื™ื ื‘ืžืžืฉืง ื”-API ืฉืœ Kubernetes: ื”ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ืžื ื•ื”ืœื™ื ืขืœ ื™ื“ื™ ืžื ื’ื ื•ื ื™ื ื—ื™ืฆื•ื ื™ื™ื. ื”ื ืžื™ื•ืขื“ื™ื ืœืื ืฉื™ื ืื• ืœืชื”ืœื™ื›ื™ื ื”ื—ื™ื™ื ืžื—ื•ืฅ ืœืืฉื›ื•ืœ.

ื›ืœ ื‘ืงืฉืช API ืžืฉื•ื™ื›ืช ืœื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช, ืœืžืฉืชืžืฉ ืื• ื ื—ืฉื‘ืช ืœืื ื•ื ื™ืžื™ืช.

ื ืชื•ื ื™ ืื™ืžื•ืช ื”ืžืฉืชืžืฉ ื›ื•ืœืœื™ื:

  • ืฉื ืžืฉืชืžืฉ - ืฉื ืžืฉืชืžืฉ (ืชืœื•ื™ ืจื™ืฉื™ื•ืช!);
  • UID - ืžื—ืจื•ื–ืช ื–ื™ื”ื•ื™ ืžืฉืชืžืฉ ื”ื ื™ืชื ืช ืœืงืจื™ืื” ื‘ืžื›ื•ื ื” ืฉื”ื™ื "ืขืงื‘ื™ืช ื•ื™ื™ื—ื•ื“ื™ืช ื™ื•ืชืจ ืžืฉื ื”ืžืฉืชืžืฉ";
  • ืงื‘ื•ืฆื•ืช - ืจืฉื™ืžืช ื”ืงื‘ื•ืฆื•ืช ืืœื™ื”ืŸ ืžืฉืชื™ื™ืš ื”ืžืฉืชืžืฉ;
  • ื ื•ืกืฃ - ืฉื“ื•ืช ื ื•ืกืคื™ื ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ืขืœ ื™ื“ื™ ืžื ื’ื ื•ืŸ ื”ื”ืจืฉืื”.

Kubernetes ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืžืกืคืจ ืจื‘ ืฉืœ ืžื ื’ื ื•ื ื™ ืื™ืžื•ืช: ืื™ืฉื•ืจื™ X509, Tokens Bearer, Proxy ืื™ืžื•ืช, HTTP Basic Auth. ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ื ื™ื ืืœื”, ืืชื” ื™ื›ื•ืœ ืœื™ื™ืฉื ืžืกืคืจ ืจื‘ ืฉืœ ืกื›ื™ืžื•ืช ื”ืจืฉืื”: ืžืงื•ื‘ืฅ ืกื˜ื˜ื™ ืขื ืกื™ืกืžืื•ืช ื•ืขื“ OpenID OAuth2.

ื™ืชืจื” ืžื›ืš, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื›ืžื” ืกื›ื™ืžื•ืช ื”ืจืฉืื•ืช ื‘ื•-ื–ืžื ื™ืช. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื”ืืฉื›ื•ืœ ืžืฉืชืžืฉ ื‘:

  • ืืกื™ืžื•ื ื™ ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช - ืขื‘ื•ืจ ื—ืฉื‘ื•ื ื•ืช ืฉื™ืจื•ืช;
  • X509 - ืœืžืฉืชืžืฉื™ื.

ื”ืฉืืœื” ืœื’ื‘ื™ ื ื™ื”ื•ืœ ServiceAccounts ื”ื™ื ืžืขื‘ืจ ืœืชื—ื•ื ื”ืžืืžืจ ื”ื–ื”, ืื‘ืœ ืœืžื™ ืฉืจื•ืฆื” ืœื”ื›ื™ืจ ืืช ื”ื ื•ืฉื ื‘ื™ืชืจ ืคื™ืจื•ื˜, ืื ื™ ืžืžืœื™ืฅ ืœื”ืชื—ื™ืœ ืขื ื“ืคื™ ืชื™ืขื•ื“ ืจืฉืžื™ื™ื. ื ืกืงื•ืจ ืžืงืจื•ื‘ ืืช ื”ื ื•ืฉื ืฉืœ ืื•ืคืŸ ื”ืคืขื•ืœื” ืฉืœ ืชืขื•ื“ื•ืช 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"
  • ืขื™ื‘ื•ื“ ื‘ืงืฉืช ืื™ืฉื•ืจ ื‘ืืžืฆืขื•ืช ืžืคืชื—ื•ืช ื”-CA ืฉืœ ืืฉื›ื•ืœ Kubernetes, ื”ืฉื’ืช ืื™ืฉื•ืจ ืžืฉืชืžืฉ (ื›ื“ื™ ืœืงื‘ืœ ืื™ืฉื•ืจ, ืขืœื™ืš ืœื”ืฉืชืžืฉ ื‘ื—ืฉื‘ื•ืŸ ืฉื™ืฉ ืœื• ื’ื™ืฉื” ืœืžืคืชื— ื”-CA ืฉืœ ืืฉื›ื•ืœ Kubernetes, ืืฉืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื ืžืฆื ื‘ /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 ืœื ื™ื‘ื“ื•ืง ืืช ื ื›ื•ื ื•ืช ืฉืจืช ื”-API ืฉืœ ื”ืืฉื›ื•ืœ):
      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 ื•ืœืจืฉื•ื ืื•ืชื ื‘-config, ืชื•ืš ื”ื•ืกืคืช ื”ืกื™ื•ืžืช ืœืฉื ื”ืžืคืชื—ื•ืช -data, ื›ืœื•ืžืจ ืœืื—ืจ ืฉืงื™ื‘ืœ certificate-authority-data ื•ื›ื• '

ืชืขื•ื“ื•ืช ืขื kubeadm

ืขื ื”ืฉื—ืจื•ืจ ืงื•ื‘ืจื ื˜ืก 1.15 ื”ืขื‘ื•ื“ื” ืขื ืชืขื•ื“ื•ืช ื”ืคื›ื” ืœื”ืจื‘ื” ื™ื•ืชืจ ืงืœื” ื”ื•ื“ื•ืช ืœื’ืจืกืช ื”ืืœืคื ืฉืœ ื”ืชืžื™ื›ื” ืฉืœื” ื‘ ื›ืœื™ ื”ืฉื™ืจื•ืช kubeadm. ืœื“ื•ื’ืžื”, ื›ืš ืขืฉื•ื™ื” ืœื”ื™ืจืื•ืช ื›ืขืช ื™ืฆื™ืจืช ืงื•ื‘ืฅ ืชืฆื•ืจื” ืขื ืžืคืชื—ื•ืช ืžืฉืชืžืฉ:

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

NB: ื ื“ืจืฉ ื›ืชื•ื‘ืช ืœืคืจืกื ื ื™ืชืŸ ืœืžืฆื•ื ื‘ืชืฆื•ืจืช ื”-API-server, ืืฉืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื ืžืฆืืช ื‘ /etc/kubernetes/manifests/kube-apiserver.yaml.

ื”ืชืฆื•ืจื” ืฉืชืชืงื‘ืœ ืชื•ืฆื ืœ-stdout. ืฆืจื™ืš ืœืฉืžื•ืจ ืืช ื–ื” ~/.kube/config ื—ืฉื‘ื•ืŸ ืžืฉืชืžืฉ ืื• ืœืงื•ื‘ืฅ ืฉืฆื•ื™ืŸ ื‘ืžืฉืชื ื” ืกื‘ื™ื‘ื” KUBECONFIG.

ืœื—ืคื•ืจ ืขืžื•ืง ื™ื•ืชืจ

ืœืžื™ ืฉืจื•ืฆื” ืœื”ื‘ื™ืŸ ืืช ื”ื ื•ืฉืื™ื ื”ืžืชื•ืืจื™ื ื‘ืฆื•ืจื” ื™ืกื•ื“ื™ืช ื™ื•ืชืจ:

ื”ืจืฉืื”

ืœื—ืฉื‘ื•ืŸ ืžื•ืจืฉื” ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืื™ืŸ ื–ื›ื•ื™ื•ืช ืœืคืขื•ืœ ื‘ืืฉื›ื•ืœ. ื›ื“ื™ ืœื”ืขื ื™ืง ื”ืจืฉืื•ืช, Kubernetes ืžื™ื™ืฉืžืช ืžื ื’ื ื•ืŸ ื”ืจืฉืื”.

ืœืคื ื™ ื’ืจืกื” 1.6, Kubernetes ื”ืฉืชืžืฉื” ื‘ืกื•ื’ ื”ืจืฉืื” ื‘ืฉื ABAC (ื‘ืงืจืช ื’ื™ืฉื” ืžื‘ื•ืกืกืช ืชื›ื•ื ื•ืช). ืคืจื˜ื™ื ืขืœ ื–ื” ื ื™ืชืŸ ืœืžืฆื•ื ื‘ ืชื™ืขื•ื“ ืจืฉืžื™. ื’ื™ืฉื” ื–ื• ื ื—ืฉื‘ืช ื›ื™ื•ื ืœืžื•ืจืฉืช, ืืš ืืชื” ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื” ืœืฆื“ ืกื•ื’ื™ ืื™ืžื•ืช ืื—ืจื™ื.

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

ืื’ื‘, ื›ื‘ืจ ืคืจืกืžื ื• ืžืืžืจ ืขื ืชื™ืื•ืจ ืžืคื•ืจื˜ ืœืžื“ื™ ืฉืœ ื”ืขืงืจื•ื ื•ืช ื•ื”ืชื›ื•ื ื•ืช ืฉืœ ืขื‘ื•ื“ื” ืขื RBAC, ืื– ื‘ื”ืžืฉืš ืืกืชืคืง ื‘ืจืฉื™ืžื” ืงืฆืจื” ืฉืœ ื”ื™ืกื•ื“ื•ืช ื•ื”ื“ื•ื’ืžืื•ืช.

ื™ืฉื•ื™ื•ืช ื”-API ื”ื‘ืื•ืช ืžืฉืžืฉื•ืช ืœืฉืœื™ื˜ื” ื‘ื’ื™ืฉื” ื‘-Kubernetes ื‘ืืžืฆืขื•ืช RBAC:

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

ื”ื™ืฉื•ื™ื•ืช Role ื•-RoleBinding ืžื•ื’ื‘ืœื•ืช ืขืœ ื™ื“ื™ ืžืจื—ื‘ ื”ืฉืžื•ืช, ื›ืœื•ืžืจ. ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื‘ืชื•ืš ืื•ืชื• ืžืจื—ื‘ ืฉืžื•ืช. ืขื ื–ืืช, RoleBinding ื™ื›ื•ืœ ืœื”ืชื™ื™ื—ืก ืœ-ClusterRole, ื”ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืงื‘ื•ืฆื” ืฉืœ ื”ืจืฉืื•ืช ื›ืœืœื™ื•ืช ื•ืœืฉืœื•ื˜ ื‘ื’ื™ืฉื” ื‘ืืžืฆืขื•ืชืŸ.

ืชืคืงื™ื“ื™ื ืžืชืืจื™ื ื–ื›ื•ื™ื•ืช ื‘ืืžืฆืขื•ืช ืžืขืจื›ื•ืช ื›ืœืœื™ื ื”ืžื›ื™ืœื•ืช:

  • ืงื‘ื•ืฆื•ืช API - ืจืื” ืชื™ืขื•ื“ ืจืฉืžื™ ืœืคื™ apiGroups ื•ืคืœื˜ 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 ื‘ืื•ืคืŸ ื”ื‘ื:

ื”-ABC ืฉืœ ืื‘ื˜ื—ื” ื‘-Kubernetes: ืื™ืžื•ืช, ื”ืจืฉืื”, ื‘ื™ืงื•ืจืช

ืจื›ื™ื‘ Kubernetes ื”ืžืคืชื— ื”ืื—ืจืื™ ืœืขื™ื‘ื•ื“ ื‘ืงืฉื•ืช ื”ื•ื ืฉืจืช api. ื›ืœ ื”ืคืขื•ืœื•ืช ื‘ืืฉื›ื•ืœ ืขื•ื‘ืจื•ืช ื“ืจื›ื•. ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ืžื ื’ื ื•ื ื™ื ืคื ื™ืžื™ื™ื ืืœื• ื‘ืžืืžืจ "ืžื” ืงื•ืจื” ื‘-Kubernetes ื›ืฉืืชื” ืžืคืขื™ืœ ืืช kubectl run?".

ื‘ื™ืงื•ืจืช ืžืขืจื›ื•ืช ื”ื™ื ืชื›ื•ื ื” ืžืขื ื™ื™ื ืช ื‘- Kubernetes, ื”ืžื•ืฉื‘ืชืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ื–ื” ืžืืคืฉืจ ืœืš ืœืจืฉื•ื ืืช ื›ืœ ื”ืฉื™ื—ื•ืช ืœ-Kubernetes API. ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœื ื—ืฉ, ื›ืœ ื”ืคืขื•ืœื•ืช ื”ืงืฉื•ืจื•ืช ืœื ื™ื˜ื•ืจ ื•ืฉื™ื ื•ื™ ืžืฆื‘ ื”ืืฉื›ื•ืœ ืžื‘ื•ืฆืขื•ืช ื‘ืืžืฆืขื•ืช API ื–ื”. ืชื™ืื•ืจ ื˜ื•ื‘ ืฉืœ ื”ื™ื›ื•ืœื•ืช ืฉืœื• ื ื™ืชืŸ (ื›ืจื’ื™ืœ) ืœืžืฆื•ื ื‘ ืชื™ืขื•ื“ ืจืฉืžื™ K8s. ืœืื—ืจ ืžื›ืŸ, ืื ืกื” ืœื”ืฆื™ื’ ืืช ื”ื ื•ืฉื ื‘ืฉืคื” ืคืฉื•ื˜ื” ื™ื•ืชืจ.

ืœืคื™ื›ืš, ื›ื“ื™ ืœืืคืฉืจ ื‘ื™ืงื•ืจืช, ืขืœื™ื ื• ืœื”ืขื‘ื™ืจ ืฉืœื•ืฉื” ืคืจืžื˜ืจื™ื ื ื“ืจืฉื™ื ืœืงื•ื ื˜ื™ื™ื ืจ ื‘-API-server, ื”ืžืชื•ืืจื™ื ื‘ื™ืชืจ ืคื™ืจื•ื˜ ืœื”ืœืŸ:

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

ื‘ื ื•ืกืฃ ืœืฉืœื•ืฉืช ื”ืคืจืžื˜ืจื™ื ื”ื”ื›ืจื—ื™ื™ื ื”ืœืœื•, ื™ืฉื ืŸ ื”ื’ื“ืจื•ืช ืจื‘ื•ืช ื ื•ืกืคื•ืช ื”ืงืฉื•ืจื•ืช ืœื‘ื™ืงื•ืจืช: ื”ื—ืœ ืžืกื™ื‘ื•ื‘ ื™ื•ืžืŸ ื•ืขื“ ืœืชื™ืื•ืจื™ webhook. ื“ื•ื’ืžื” ืœืคืจืžื˜ืจื™ื ืฉืœ ืกื™ื‘ื•ื‘ ื™ื•ืžืŸ:

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

ืื‘ืœ ืœื ื ืชืขื›ื‘ ืขืœื™ื”ื ื‘ื™ืชืจ ืคื™ืจื•ื˜ - ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ืืช ื›ืœ ื”ืคืจื˜ื™ื ื‘ ืชื™ืขื•ื“ kube-apiserver.

ื›ืคื™ ืฉื›ื‘ืจ ืฆื•ื™ืŸ, ื›ืœ ื”ืคืจืžื˜ืจื™ื ืžื•ื’ื“ืจื™ื ื‘ืžื ื™ืคืกื˜ ืขื ืชืฆื•ืจืช ื”-API-ืฉืจืช (ื›ื‘ืจื™ืจืช ืžื—ื“ืœ /etc/kubernetes/manifests/kube-apiserver.yaml), ื‘ืกืขื™ืฃ command. ื ื—ื–ื•ืจ ืœ-3 ื”ืคืจืžื˜ืจื™ื ื”ื ื“ืจืฉื™ื ื•ื ื ืชื— ืื•ืชื:

  1. audit-policy-file - ื ืชื™ื‘ ืœืงื•ื‘ืฅ YAML ื”ืžืชืืจ ืืช ืžื“ื™ื ื™ื•ืช ื”ื‘ื™ืงื•ืจืช. ื ื—ื–ื•ืจ ืœืชื•ื›ื ื• ื‘ื”ืžืฉืš, ืืš ืœืขืช ืขืชื” ืืฆื™ื™ืŸ ืฉื”ืงื•ื‘ืฅ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืงืจื™ื ืขืœ ื™ื“ื™ ืชื”ืœื™ืš ื”-API-server. ืœื›ืŸ, ื™ืฉ ืฆื•ืจืš ืœื”ืจื›ื™ื‘ ืื•ืชื• ื‘ืชื•ืš ื”ืžื™ื›ืœ, ืขื‘ื•ืจื• ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืืช ื”ืงื•ื“ ื”ื‘ื ืœืงื˜ืขื™ื ื”ืžืชืื™ืžื™ื ืฉืœ ื”ืชืฆื•ืจื”:
      volumeMounts:
        - mountPath: /etc/kubernetes/policies
          name: policies
          readOnly: true
      volumes:
      - hostPath:
          path: /etc/kubernetes/policies
          type: DirectoryOrCreate
        name: policies
  2. audit-log-path - ื ืชื™ื‘ ืœืงื•ื‘ืฅ ื”ื™ื•ืžืŸ. ื”ื ืชื™ื‘ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื ื’ื™ืฉ ื’ื ืœืชื”ืœื™ืš ืฉืจืช ื”-API, ืื– ืื ื• ืžืชืืจื™ื ืืช ื”ื”ืจื›ื‘ื” ืฉืœื• ื‘ืื•ืชื• ืื•ืคืŸ:
      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) ืื™ืŸ ืœืจืฉื•ื ื‘ืงืฉื•ืช ืฉืœื ื ื™ื’ืฉื• ืœืžืฉืื‘ื™ื (ื’ื™ืฉื” ืœืžื” ืฉื ืงืจื ื›ืชื•ื‘ื•ืช ืืชืจื™ื ืฉืื™ื ืŸ ืžืฉืื‘ื™ื).

ื›ืžื• ื›ืŸ ื›ืœ ื”ื‘ืงืฉื•ืช ืขื•ื‘ืจื•ืช ืžืกืคืจ ืฉืœื‘ื™ื:

  • RequestReceived - ื”ืฉืœื‘ ืฉื‘ื• ื”ื‘ืงืฉื” ืžืชืงื‘ืœืช ืขืœ ื™ื“ื™ ื”ืžืขื‘ื“ ื•ื˜ืจื ื”ื•ืขื‘ืจื” ื‘ื”ืžืฉืš ืฉืจืฉืจืช ื”ืžืขื‘ื“ื™ื;
  • ResponseStarted - ื›ื•ืชืจื•ืช ื”ืชื’ื•ื‘ื” ื ืฉืœื—ื•ืช, ืืš ืœืคื ื™ ืฉืœื™ื—ืช ื’ื•ืฃ ื”ืชื’ื•ื‘ื”. ื ื•ืฆืจ ืขื‘ื•ืจ ืฉืื™ืœืชื•ืช ืืจื•ื›ื•ืช ื˜ื•ื•ื— (ืœื“ื•ื’ืžื”, watch);
  • ResponseComplete - ื’ื•ืฃ ื”ืชื’ื•ื‘ื” ื ืฉืœื—, ืœื ื™ื™ืฉืœื— ืžื™ื“ืข ื ื•ืกืฃ;
  • Panic - ืื™ืจื•ืขื™ื ื ื•ืฆืจื™ื ื›ืืฉืจ ืžื–ื•ื”ื” ืžืฆื‘ ื—ืจื™ื’.

ื›ื“ื™ ืœื“ืœื’ ืขืœ ื›ืœ ืฉืœื‘ ืฉืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื• omitStages.

ื‘ืงื•ื‘ืฅ ืžื“ื™ื ื™ื•ืช, ืื ื• ื™ื›ื•ืœื™ื ืœืชืืจ ืžืกืคืจ ืกืขื™ืคื™ื ืขื ืจืžื•ืช ืจื™ืฉื•ื ืฉื•ื ื•ืช. ื›ืœืœ ื”ื”ืชืืžื” ื”ืจืืฉื•ืŸ ืฉื ืžืฆื ื‘ืชื™ืื•ืจ ื”ืžื“ื™ื ื™ื•ืช ื™ื•ื—ืœ.

ื”ื“ืžื•ืŸ kubelet ืขื•ืงื‘ ืื—ืจ ืฉื™ื ื•ื™ื™ื ื‘ืžื ื™ืคืกื˜ ืขื ืชืฆื•ืจืช ืฉืจืช ื”-API, ื•ืื ืžืชื’ืœื™ื ื›ืืœื”, ืžืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืžื™ื›ืœ ืขื ืฉืจืช ื”-API. ืื‘ืœ ื™ืฉ ืคืจื˜ ื—ืฉื•ื‘: ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื‘ืฅ ื”ืžื“ื™ื ื™ื•ืช ื™ืชืขืœืžื• ืขืœ ื™ื“ื•. ืœืื—ืจ ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื‘ืฅ ื”ืžื“ื™ื ื™ื•ืช, ื™ื”ื™ื” ืขืœื™ืš ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ืฉืจืช ื”-API ื‘ืื•ืคืŸ ื™ื“ื ื™. ืžืื– ืฉืจืช api ืžื•ืคืขืœ ื‘ืชื•ืจ ืชืจืžื™ืœ ืกื˜ื˜ื™, ืฆื•ื•ืช kubectl delete ืœื ื™ื’ืจื•ื ืœื”ืคืขืœื” ืžื—ื“ืฉ. ืชืฆื˜ืจืš ืœืขืฉื•ืช ื–ืืช ื‘ืื•ืคืŸ ื™ื“ื ื™ docker stop ื‘-kube-masters, ืฉื ืฉื•ื ืชื” ืžื“ื™ื ื™ื•ืช ื”ื‘ื™ืงื•ืจืช:

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

ื‘ืขืช ื”ืคืขืœืช ื‘ื™ืงื•ืจืช, ื—ืฉื•ื‘ ืœื–ื›ื•ืจ ื–ืืช ื”ืขื•ืžืก ืขืœ kube-apiserver ื’ื“ืœ. ื‘ืคืจื˜, ืฆืจื™ื›ืช ื”ื–ื™ื›ืจื•ืŸ ืœืื—ืกื•ืŸ ื”ืงืฉืจ ื”ื‘ืงืฉื” ืขื•ืœื”. ืจื™ืฉื•ื ื”ืจื™ืฉื•ื ืžืชื—ื™ืœ ืจืง ืœืื—ืจ ืฉืœื™ื—ืช ื›ื•ืชืจืช ื”ืชื’ื•ื‘ื”. ื”ืขื•ืžืก ืชืœื•ื™ ื’ื ื‘ืชืฆื•ืจืช ืžื“ื™ื ื™ื•ืช ื”ื‘ื™ืงื•ืจืช.

ื“ื•ื’ืžืื•ืช ืœืคื•ืœื™ืกื•ืช

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืžื‘ื ื” ืฉืœ ืงื‘ืฆื™ ืžื“ื™ื ื™ื•ืช ื‘ืืžืฆืขื•ืช ื“ื•ื’ืžืื•ืช.

ื”ื ื” ืงื•ื‘ืฅ ืคืฉื•ื˜ 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).

ืฉื™ืžื• ืœื‘! ื ื™ืชืŸ ืœื”ืฉื™ื’ ืžืฉืื‘ื™ื ื•ืงื‘ื•ืฆื•ืช ืžืฉืื‘ื™ื (ืงื‘ื•ืฆื•ืช API, ื›ืœื•ืžืจ 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.

ื›ื“ื™ ืœื”ื’ื™ื‘ ื‘ืžื”ื™ืจื•ืช ืœืื™ืจื•ืขื™ ื‘ื™ืงื•ืจืช, ื–ื” ืืคืฉืจื™ ืชืืจ webhook. ื ื•ืฉื ื–ื” ืžื›ื•ืกื” ื‘ ืชื™ืขื•ื“ ืจืฉืžื™, ืืฉืื™ืจ ืื•ืชื• ืžื—ื•ืฅ ืœืชื—ื•ื ื”ืžืืžืจ ื”ื–ื”.

ืชื•ืฆืื•ืช ืฉืœ

ื”ืžืืžืจ ืžืกืคืง ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ืžื ื’ื ื•ื ื™ ืื‘ื˜ื—ื” ื‘ืกื™ืกื™ื™ื ื‘ืืฉื›ื•ืœื•ืช Kubernetes, ื”ืžืืคืฉืจื™ื ืœืš ืœื™ืฆื•ืจ ื—ืฉื‘ื•ื ื•ืช ืžืฉืชืžืฉ ืžื•ืชืืžื™ื ืื™ืฉื™ืช, ืœื”ืคืจื™ื“ ื‘ื™ืŸ ื–ื›ื•ื™ื•ืชื™ื”ื ื•ืœืชืขื“ ืืช ืคืขื•ืœื•ืชื™ื”ื. ืื ื™ ืžืงื•ื•ื” ืฉื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืœืžื™ ืฉืขื•ืžื“ ื‘ืคื ื™ ื‘ืขื™ื•ืช ื›ืืœื” ื‘ืชื™ืื•ืจื™ื” ืื• ื‘ืคื•ืขืœ. ืื ื™ ื’ื ืžืžืœื™ืฅ ืœืš ืœืงืจื•ื ืืช ืจืฉื™ืžืช ื”ื—ื•ืžืจื™ื ื”ืื—ืจื™ื ื‘ื ื•ืฉื ืื‘ื˜ื—ื” ื‘-Kubernetes, ื”ืžื•ืคื™ืขื” ื‘-"PS" - ืื•ืœื™ ื‘ื™ื ื™ื”ื ืชืžืฆื ืืช ื”ืคืจื˜ื™ื ื”ื“ืจื•ืฉื™ื ืขืœ ื”ื‘ืขื™ื•ืช ื”ืจืœื•ื•ื ื˜ื™ื•ืช ืœืš.

ื .ื‘.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”