Когда вы создаете пользователя в Docker Enterprise Edition (EE), этот пользователь может немедленно создать службу Swarm в кластере.
Все, что ему нужно сделать, это сгенерировать, загрузить, распаковать и «выполнить» их клиентский пакет.
Однако на стороне Kubernetes управление доступом на основе ролей (RBAC) и пользовательские разрешения по умолчанию немного отличаются.
Я покажу вам, как настроить подобный опыт с Kubernetes, который вы получаете с готовым Swarm.
Docker EE создает клиентский пакет, который содержит сертификаты, переменные среды и т. д., необходимые для настройки системы для взаимодействия с кластером с помощью команд docker и kubectl.
В системе Windows 10 вы используете приведенную ниже команду в окне PowerShell.
В системе Linux вы должны использовать env.sh в командной строке Bash.
ken> Import-Module .\env.ps1
Cluster "ucp_ken-ucp.lab.capstonec.net:6443_ken.rider" set.
User "ucp_ken-ucp.lab.capstonec.net:6443_ken.rider" set.
Context "ucp_ken-ucp.lab.capstonec.net:6443_ken.rider" modified.
ken> docker service create --name nginx nginx:1.14-alpine
zaslrujj7y0rrp53b1ds9q7as
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
ken> kubectl create deployment nginx --image=nginx:1.14-alpine
Error from server (Forbidden):
deployments.extensions is forbidden: User
"8f796584-5683-4c24-baf8-554ad21ad86f" cannot create
deployments.extensions in the namespace "default": access denied
В случае с Kubernetes Docker EE поддерживает RBAC Kubernetes, но не настраивает пространства имен, роли или привязки ролей для пользователя.
Чтобы (в некоторой степени) воспроизвести действия Docker EE для пользователей Swarm для пользователей Kubernetes, нам необходимо определить соответствующее пространство имен, роль и связывание ролей для них.
kind: Namespace apiVersion: v1 metadata: name: user-kenrider --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: user-kenrider-full-access namespace: user-kenrider rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: labels: subjectName: ken.rider name: ken.rider:user-kenrider-full-access namespace: user-kenrider roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: user-kenrider-full-access subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: ken.rider
admin> kubectl apply -f .\user-ken.rider.yml
namespace "user-kenrider" created
role.rbac.authorization.k8s.io "user-kenrider-full-access" created
rolebinding.rbac.authorization.k8s.io "ken.rider:user-kenrider-full-access" created
ken> kubectl --namespace user-kenrider create deployment nginx --image=nginx:1.14-alpine
deployment.extensions "nginx" created