مرحبا،
هيلم 2.5.0
Kubernetes 1.6 مع تمكين RBAC على GCP
قم بتشغيل هذه الأوامر في الحاوية باستخدام kubectl و helm:
$ kubectl config set-credentials $K8S_USER --username=$K8S_USER --password=$K8S_PASS
$ kubectl config set-cluster test-cluster --server=https://$K8S_SERVER --insecure-skip-tls- verify=$K8S_INSECURE_SKIP_TLS_VERIFY
$ kubectl config set-context default-context --cluster=$K8S_CLUSTER_NAME --user=$K8S_USER
$ kubectl config use-context default-context
$ kubectl cluster-info
Kubernetes master is running at https://****
$ helm init
$HELM_HOME has been configured at /config/.helm.
Error: error installing: User "system:anonymous" cannot create deployments.extensions in the namespace "kube-system".: "No policy matched.\nUnknown user \"system:anonymous\"" (post deployments.extensions)
ما الذي يمكنني فعله لإصلاح هذا الخطأ؟
ستحتاج إلى ربط أذونات كافية بحساب خدمة Tiller pod حتى تتمكن من تثبيت الكائنات التي تطلبها مخططاتك. الأفضل هو إنشاء حساب خدمة جديد لـ Tiller في نفس مساحة الاسم التي يعمل بها الكبسولة (في حالتك ، "kube-system") ، ثم قم بإنشاء _Role_ في مساحات الأسماء التي تنوي تثبيت المخططات فيها أو _ClusterRole_ إذا تريد مشاركة التعريف عبر العديد من مساحات الأسماء ، ثم إنشاء كائنات _RoleBinding_ أو _ClusterRoleBinding_ لمنح هذه الأذونات لحساب خدمة Tiller المحدد أعلاه.
لقد قمت بإنشاء بيان مع حساب الخدمة وتعريف ClusterRoleBinding
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
secrets:
- tiller-secret
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
ثم أضاف مستخدم هذه الخدمة لمواصفات الحارث
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
ثم تم تغيير قائمة الأوامر للمصادقة في k8s في بيان خط الأنابيب الخاص بي.
begin_script:
- echo "$CA" > /ca.crt
- kubectl config set-cluster k8s-cluster --embed-certs=true --server=https://$K8S_SERVER --certificate-authority=/ca.crt
- kubectl config set-credentials tiller --token=$USER_TOKEN
- kubectl config set-context k8s-cluster --cluster=k8s-cluster --user=tiller
- kubectl config use-context k8s-cluster
$CA
و $USER_TOKEN
- هما المتغيران السريان اللذان يحفظان بيانات ca.crt ورمز مستخدم الحارث.
استخدم هذا الأمر للحصول على ca.crt و user_token:
$ secret=$(kubectl get sa tiller -o json --namaspace=kube-system | jq -r .secrets[].name)
$ kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D # $CA
$ kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D # $USER_TOKEN
لاحظ أن _helm init_ تمنح علامة --service-account
اعتبارًا من الالتزام 64e9e471838ac44e551c32abcbd19f671c80ecce.