Моя структура папок выглядит следующим образом:
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, и как я могу это исправить?