Как запустить Ansible с Kerberos в контейнере Docker? - PullRequest
0 голосов
/ 10 октября 2018

Моя структура папок выглядит следующим образом:

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

Я могу пропинговать хост, и curl на not-working.host:5985 успешен и возвращает то же самое, что и при попытке выйти за пределы контейнера.Контейнер также может пропинговать doma.in.

Итак, вопрос в том, что именно происходит, и почему контейнер не работает только для хостов Windows, подключающихся через Kerberos, и как я могу это исправить?

...