User Tools

Site Tools


безопасность_в_kubernetes

This is an old revision of the document!


Безопасность в Kubernetes

Реклама

  • Kubernetes — это решение, превращающее Linux сервера в кластер, и, как Linux является многопользовательской, многозадачной операционной системой, так и Kubernetes позволяет множеству пользователей и приложений работать в одном кластере безопасно разделяя его ресурсы
  • На нашем вебинаре Вы узнаете как настраивать права доступа в Kubernetes на примерах практических, полезных задач

Техническое задание

  • Создать учетную запись пользователя с необходимыми правами и файл конфигурации для подключения младшего системного администратора к Web ресурсам Kubernetes
  • Создать учтённую запись для сервиса с необходимыми правами для запуска приложений в Kubernetes

Запись вебинара

  • Тэги:

Шаг 1. Что у нас есть для начала

Шаг 2. Создание учетной записи

user2@server:~$ cat user2.req | base64 -w0
kube1:~/users# kubectl explain csr.spec.usages

kube1:~/users# cat user2.req.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: user2
spec:
  request: LS0t...S0tCg==
  signerName: kubernetes.io/kube-apiserver-client
  expirationSeconds: 8640000  # 100 * one day
  usages:
#  - digital signature
#  - key encipherment
  - client auth

kube1:~/users# kubectl apply -f user2.req.yaml

kube1:~/users# kubectl describe csr/user2

kube1:~/users# kubectl certificate approve user2

kube1:~/users# kubectl get csr

kube1:~/users# kubectl get csr/user2 -o yaml

kube1:~/users# kubectl get csr/user2 -o jsonpath="{.status.certificate}" | base64 -d | tee user2.crt


user2@server:~$ scp root@kube1:users/user2.crt .
user2@server:~$ kubectl config set-cluster cluster.local --insecure-skip-tls-verify=true --server=https://192.168.13.221:6443

user2@server:~$ cat .kube/config

user2@server:~$ kubectl config set-credentials user2 --client-certificate=user2.crt --client-key=user2.key --embed-certs=true

user2@server:~$ kubectl config set-context default-context --cluster=cluster.local --user=user2

user2@server:~$ kubectl config use-context default-context

user2@server:~$ kubectl auth whoami

user2@server:~$ kubectl get pods
Error from server (Forbidden)

Шаг 3. Предоставление доступа к services/port-forward в Namespace

kube1:~/users# cat user2-pg-svc-pfw-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: user2-pg-svc-pfw-rolebinding
  namespace: my-pgcluster-ns
subjects:
- kind: User
  name: user2
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pg-svc-pfw-role
  apiGroup: rbac.authorization.k8s.io
kube1:~/users# cat pg-svc-pfw-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-pgcluster-ns
  name: pg-svc-pfw-role
rules:
- apiGroups: [""]
  resources: ["services"]
  verbs: ["get"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]
- apiGroups: [""]
  resources: ["pods/portforward"]
  verbs: ["create"]
kube1:~/users# kubectl apply -f pg-svc-pfw-role.yaml,user2-pg-svc-pfw-rolebinding.yaml

student@client1:~$ kubectl port-forward -n my-pgcluster-ns services/my-pgcluster-rw 5432:5432                 

student@client1:~$ psql postgres://keycloak:strongpassword@127.0.0.1:5432/postgres

Шаг 4. Предоставление доступа к services/proxy в Cluster

kube1:~/users# cat lh-svc-proxy-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: longhorn-system
  name: lh-svc-proxy-role
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  verbs: ["get"]
kube1:~/users# cat user2-lh-svc-proxy-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: user2-lh-svc-proxy-rolebinding
  namespace: longhorn-system
subjects:
- kind: User
  name: user2
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: lh-svc-proxy-role
  apiGroup: rbac.authorization.k8s.io
kube1:~/users# kubectl apply -f lh-svc-proxy-role.yaml,user2-lh-svc-proxy-rolebinding.yaml

student@client1:~$ kubectl proxy

student@client1:~$ curl http://localhost:8001/api/v1/namespaces/longhorn-system/services/longhorn-frontend:80/proxy/

student@client1:~$ curl http://localhost:8001/api/v1/namespaces/my-keycloak-ns/services/my-keycloak:80/proxy/ -v

Черновик

безопасность_в_kubernetes.1761634609.txt.gz · Last modified: 2025/10/28 09:56 by val