Kubernetes Ansible can';t handle kubectl代理命令

Kubernetes Ansible can';t handle kubectl代理命令,kubernetes,ansible,kubectl,Kubernetes,Ansible,Kubectl,我有一个Ansible脚本,它安装了Kubernetes集群,应该可以启用仪表板。一项任务是给我一些问题: - name: Expose Dashboard UI shell: kubectl proxy --port=8001 --address={{ hostvars['master'].master_node_ip }} --accept-hosts="^*$" >> dashboard_started.txt args: chdir: $HOME cr

我有一个Ansible脚本,它安装了Kubernetes集群,应该可以启用仪表板。一项任务是给我一些问题:

- name: Expose Dashboard UI
  shell: kubectl proxy --port=8001 --address={{ hostvars['master'].master_node_ip }} --accept-hosts="^*$" >> dashboard_started.txt
  args:
    chdir: $HOME
    creates: dashboard_started.txt
问题是,这是可行的,但命令
kubectl proxy
正在阻塞:在命令中按ctrl+c组合键之前,无法键入其他命令,此时仪表板无法访问。我的Ansible脚本因执行此命令而冻结。Ansible冻结时,我可以成功连接到浏览器中的仪表板。但在这之后,我还需要Ansible执行其他任务。我已尝试在命令末尾添加一个符号和
&

kubectl proxy--port=8001--address={{hostvars['master'].master\u node\u ip}}--accept hosts=“^*$”>>dashboard\u start.txt&

kubectl proxy--port=8001--address={{hostvars['master'].master\u node\u ip}}--accept hosts=“^*$”&>>dashboard\u start.txt

虽然这两个命令都会导致Ansible执行并跳过我的任务,但我无法到达仪表板。在运行该命令的计算机上使用
jobs
命令,不会显示root用户或Ansible用户的后台任务

我做错了什么

编辑:

对于阅读本文的读者:请不要这样做,除非您可以从LOCALHOST访问仪表板。如果您在VM或某个外部服务器上运行Kubernetes Dashboard,并试图从另一台机器(例如VM主机)访问它,则无法登录。请看这里:

注意:仪表板不应使用kubectl代理公开 命令,因为它只允许HTTP连接。对于除 localhost和127.0.0.1将无法登录。没有什么 将在单击登录页面上的登录按钮后发生


可以使用异步选项运行任务。例如:

- name: Expose Dashboard UI
  shell: "(kubectl proxy --port=8001 --address={{ hostvars['master'].master_node_ip }} --accept-hosts="^*$" >> dashboard_started.txt >/dev/null 2>&1 &)"
  args:
    chdir: $HOME
    creates: dashboard_started.txt
  async: 10
  poll: 0
当poll为0时,Ansible将启动任务并立即转到下一个任务,而无需等待结果

我个人添加了子shell括号,虽然我认为没有必要使用它们,但异步本身完成了我希望的任务

希望有帮助