首页 > 解决方案 > Ansible 在使用 Google Cloud Platform 进行身份验证时遇到问题

问题描述

我们正在使用Ansible将映像部署到Google Kubernetes 集群(GKE)。

我们已经设置了 Ubuntu 20.04 和 Python 3.8.5。

剧本.main.yml:

---
- hosts: localhost
  vars:
    k8s_file_path: /home/pesinn/Documents/...
  become: yes
  become_method: sudo
  roles:
    - k8s

主要.yml:

- name: First Deployment
  k8s:
    kubeconfig: /home/pesinn/.kube/config
    src: "{{k8s_file_path}}/deployment.yml"

当尝试部署在 deployment.yml 文件中定义的映像时,通过运行 playbook,我们收到此错误:

kubernetes.config.config_exception.ConfigException: cmd-path: process returned 1 Cmd: /home/pesinn/y/google-cloud-sdk/bin/gcloud config config-helper --format=json Stderr: WARNING: 无法打开配置文件:[/root/.config/gcloud/configurations/config_default]。错误:(gcloud.config.config-helper)您当前没有选择活动帐户。请运行:$ gcloud auth login

我们已经做了什么

这里非常奇怪的是我们肯定已经登录了。我们可以在本地机器上通过 kubectl 命令访问 GKE 集群。但是,Ansible 抱怨我们没有登录。此外,在错误日志中,我们看到它正在尝试打开 /root/.config/gcloud/configurations/config_default。另一方面,我们的默认配置文件位于主文件夹中。

此错误随机发生。有时 Ansible 可以检测到我们的登录并部署镜像,但有时它会给我们这个错误。这两种情况都可以在不进行任何代码更改的情况下发生。

标签: ansiblegoogle-kubernetes-engine

解决方案


出于某种原因,ansible 不使用 GCP 的默认环境变量进行身份验证。你可以设置

GCP_AUTH_KIND
GCP_SERVICE_ACCOUNT_EMAIL
GCP_SERVICE_ACCOUNT_FILE
GCP_SCOPES

GCP_SERVICE_ACCOUNT_FILE相当于GOOGLE_APPLICATION_CREDENTIALS

参考:https ://docs.ansible.com/ansible/latest/scenario_guides/guide_gce.html#providing-credentials-as-environment-variables


推荐阅读