Управление GKE и его развертыванием с Terraform - PullRequest
0 голосов
/ 25 января 2019

Я могу использовать terraform для развертывания кластера Kubernetes в GKE.

Затем я настроил провайдера для Kubernetes следующим образом:

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)}"
}

По умолчанию terraform взаимодействует с Kubernetes с пользователем client, который не имеет полномочий для создания (например) развертываний. Таким образом, я получаю эту ошибку, когда пытаюсь применить свои изменения с 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"

Я не знаю, как мне действовать сейчас, как я должен дать эти разрешения пользователю client?

Если к провайдеру добавить следующие поля, я могу выполнить развертывание, хотя после прочтения документации кажется, что эти учетные данные используются для HTTP связи с кластером, что небезопасно, если это делается через Интернет. .

username              = "${data.google_container_cluster.primary.master_auth.0.username}"
password              = "${data.google_container_cluster.primary.master_auth.0.password}"

Есть ли другой лучший способ сделать это?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Вы должны предоставить оба.Проверьте этот пример о том, как интегрировать провайдера Kubernetes с провайдером Google.

Пример того, как настроить провайдера 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)}"
}
0 голосов
/ 05 марта 2019
  • вы можете использовать служебную учетную запись, на которой запущена terraform
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
}

ИЛИ

  • дать разрешения для "клиента" по умолчанию
  • Но вам нужна действительная аутентификация на провайдере кластера GKE, чтобы выполнить это: / поднимает круговую зависимость здесь
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"
  }
}
0 голосов
/ 26 января 2019

Похоже, что используемому пользователю не хватает необходимой роли RBAC для создания развертываний.Убедитесь, что у пользователя есть правильные глаголы для ресурса развертывания.Вы можете взглянуть на примеры ролей , чтобы получить представление об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...