ansible - 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
我们已经做了什么
- 初始化云:
gcloud init
- 登录并选择一个项目
gcloud auth login
- 跑
export GOOGLE_APPLICATION_CREDENTIALS="path_to_service_account_key.json"
- 跑
gcloud container clusters get-credentials {gke_project} --region {region}
- 运行剧本
sudo ansible-playbook playbook.main.yml -vvv
- 在本地机器上运行
gcloud config config-helper --format=json
没有任何问题
这里非常奇怪的是我们肯定已经登录了。我们可以在本地机器上通过 kubectl 命令访问 GKE 集群。但是,Ansible 抱怨我们没有登录。此外,在错误日志中,我们看到它正在尝试打开 /root/.config/gcloud/configurations/config_default。另一方面,我们的默认配置文件位于主文件夹中。
此错误随机发生。有时 Ansible 可以检测到我们的登录并部署镜像,但有时它会给我们这个错误。这两种情况都可以在不进行任何代码更改的情况下发生。
解决方案
出于某种原因,ansible 不使用 GCP 的默认环境变量进行身份验证。你可以设置
GCP_AUTH_KIND
GCP_SERVICE_ACCOUNT_EMAIL
GCP_SERVICE_ACCOUNT_FILE
GCP_SCOPES
GCP_SERVICE_ACCOUNT_FILE
相当于GOOGLE_APPLICATION_CREDENTIALS
推荐阅读
- android - 片段交易后RecyclerView项目消失
- javascript - 做出反应。如何仅对现有密钥使用 fetch 和 setState 处理 API 响应中缺少的密钥?
- php - 从 Mysql 数据库中选择,直到出现特定行问题
- python - python 如何使用 jumpssh 无密码连接
- regex - 匹配重复 3 次或更多次
- php - 没有显示输出?
- python - 错误:sqlalchemy.exc.ProgrammingError 中“N”处或附近的语法错误
- sql - 将 int 格式转换为日期并在 SQL Server 中查找差异
- c# - 从 URL 获取最后一个路径
- mysql - 数据库连接错误.....无法加载驱动程序类...数据源异常