如何在Docker容器中使用Kerberos运行Ansible?

时间:2018-10-10 08:36:44

标签: docker ansible kerberos

我的文件夹结构是这样的:

ansible
   |── inventory
   |── roles
   └── various ansible stuff
Dockerfile
krb5.conf

我已经正确设置了Kerberos,并且可以在计算机上运行所有Ansible剧本而没有任何问题。但是当我将Ansible放入容器后尝试执行相同的操作时,会出现一些问题。

这是我的Dockerfile

FROM ubuntu
RUN apt-get update
RUN apt-get -y install sshpass
RUN apt-add-repository ppa:ansible/ansible
RUN apt-get update
RUN apt-get -y install ansible
RUN apt-get -y install python-dev libkrb5-dev krb5-user
RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python get-pip.py
RUN pip install pywinrm[kerberos]
ADD ./krb5.conf /etc/krb5.conf
VOLUME /ansible
RUN apt-get -y install curl

我首先docker build -t ansible .构建容器,然后使用docker run -it -p 5985:5985 -p 5986:5986 -v $(pwd)/ansible:/ansible ansible运行容器

使用SSH或WinRM直接连接而不通过Kerberos的主机仍然可以使用,可以连接,并且剧本仍在运行。但是对于通过Kerberos的主机,任何命令都将返回UNREACHABLE! => {"changed": false, "msg": "kerberos: Bad HTTP response returned from server. Code 500", "unreachable": true}

我的库存文件示例:

working_host:
  hosts:
    working:
      ansible_host: working.host
      ansible_connection: winrm
      ansible_port: 5986
      ansible_user: admin
      ansible_password: admin
      ansible_winrm_server_cert_validation: ignore

not_working_host:
  hosts:
    not_working:
      ansible_host: not-working.host
      ansible_connection: winrm
      ansible_port: 5985
      ansible_user: user@DOMA.IN
      ansible_password: !vault |
            $ANSIBLE_VAULT;1.1;AES256
            RANDOM_ENCRYPTED_PASSWORD
      ansible_winrm_server_cert_validation: ignore

我的krb5.conf就是这样

[libdefaults]
  default_realm = DOMA.IN

[realms]
  DOMA.IN = {
    kdc = doma.in
  }

[domain_realm]
  doma.in = DOMA.IN

我可以ping通主机,并且成功卷曲到not-working.host:5985并返回与在容器外尝试时相同的结果。容器还可以ping doma.in

所以,问题是:到底发生了什么?为什么容器仅对通过Kerberos连接的Windows主机不起作用?我该如何解决?

0 个答案:

没有答案