Je peux utiliser terraform
pour déployer un cluster Kubernetes
dans GKE
.
Ensuite, j'ai configuré le fournisseur pour Kubernetes
comme suit:
username = "${data.google_container_cluster.primary.master_auth.0.username}" password = "${data.google_container_cluster.primary.master_auth.0.password}"
Par défaut, terraform
interagit avec Kubernetes
avec l'utilisateur client
, qui n'a pas le pouvoir de créer (par exemple) des déploiements. Donc j'obtiens cette erreur lorsque j'essaye d'appliquer mes modifications avec terraform
:
Error: Error applying plan: 1 error(s) occurred: * kubernetes_deployment.foo: 1 error(s) occurred: * kubernetes_deployment.foo: Failed to create deployment: deployments.apps is forbidden: User "client" cannot create deployments.apps in the namespace "default"
Je ne sais pas comment dois-je procéder maintenant, comment dois-je J'accorde ces autorisations à l'utilisateur client
?
Si les champs suivants sont ajoutés au fournisseur, je suis en mesure d'effectuer des déploiements, bien qu'après avoir lu la documentation, il semble que ces informations soient utilisé pour la communication HTTP
avec le cluster, ce qui n'est pas sûr si cela se fait via Internet.
provider "kubernetes" { host = "${data.google_container_cluster.primary.endpoint}" client_certificate = "${base64decode(data.google_container_cluster.primary.master_auth.0.client_certificate)}" client_key = "${base64decode(data.google_container_cluster.primary.master_auth.0.client_key)}" cluster_ca_certificate = "${base64decode(data.google_container_cluster.primary.master_auth.0.cluster_ca_certificate)}" }
Y a-t-il une autre meilleure façon de le faire ?
3 Réponses :
Il semble que l'utilisateur que vous utilisez ne dispose pas du rôle RBAC requis pour créer des déploiements. Assurez-vous que l'utilisateur dispose des verbes corrects pour la ressource de déploiements. Vous pouvez consulter ces Exemples de rôles pour avoir une idée à ce sujet.
Vous devez fournir les deux. Consultez cet exemple comment intégrer le fournisseur Kubernetes avec le fournisseur Google.
Exemple de configuration du fournisseur Kubernetes:
provider "kubernetes" { host = "${var.host}" username = "${var.username}" password = "${var.password}" client_certificate = "${base64decode(var.client_certificate)}" client_key = "${base64decode(var.client_key)}" cluster_ca_certificate = "${base64decode(var.cluster_ca_certificate)}" }
Vous devez inclure les informations clés du lien dans votre réponse.
resource "kubernetes_cluster_role_binding" "default" { metadata { name = "client-certificate-cluster-admin" } role_ref { api_group = "rbac.authorization.k8s.io" kind = "ClusterRole" name = "cluster-admin" } subject { kind = "User" name = "client" api_group = "rbac.authorization.k8s.io" } subject { kind = "ServiceAccount" name = "default" namespace = "kube-system" } subject { kind = "Group" name = "system:masters" api_group = "rbac.authorization.k8s.io" } }
OU
data "google_client_config" "default" {} provider "kubernetes" { host = "${google_container_cluster.default.endpoint}" token = "${data.google_client_config.default.access_token}" cluster_ca_certificate = "${base64decode(google_container_cluster.default.master_auth.0.cluster_ca_certificate)}" load_config_file = false }
Merci! Mon terraform fonctionnait avec une identité GCP qui disposait des droits nécessaires sur le cluster, mais je ne savais pas comment configurer le fournisseur Kubernetes pour utiliser ces informations d'identification. Votre premier exemple, montrant comment utiliser "google_client_config" pour obtenir le jeton OAuth, était ce dont j'avais besoin. Si quelqu'un se trouve dans une situation similaire, j'ajouterai que vous devez vous assurer que vous ne spécifiez pas de valeur "client_certificate" ou "client_key" lors de l'utilisation de cette solution - seul "token" doit être fourni.
Si vous trouvez des ressources supplémentaires sur la façon de procéder, n'hésitez pas à modifier votre question. Je suis actuellement coincé sur le même problème, il ne semble pas y avoir d'exemple complet de bout en bout sur la façon de déployer un cluster GKE et un déploiement Kubernetes à l'intérieur avec le plus récent RBAC.