在代理后面使用ansible k8s模块

时间:2019-10-08 20:17:58

标签: bash kubernetes proxy ansible

我尝试使用k8s模块运行一些烦人的任务。在本地,这是完美的,但是在我的Jenkins实例上,它失败并显示以下错误消息:

  

...

     

MaxRetryError(_pool,url,错误或   ResponseError(cause))\ nurllib3.exceptions.MaxRetryError:   HTTPSConnectionPool(host ='xxxxxxxxxxxxxx',   port = 443):url:/ version超过了最大重试次数(由   NewConnectionError(':无法建立新的连接:[Errno -2]   名称或服务未知',))\ n“,       “ module_stdout”:“”,       “ msg”:“模块失败\ n请参阅stdout / stderr了解确切错误”,       “ rc”:1}

我非常确定,这是因为詹金斯家族需要代理才能与外界交流。我已经看过如何设置Ansible以使用代理,但这似乎不适用于k8s模块。有任何想法吗?这是到目前为止我尝试过的:

 - hosts: ansible_server
   connection: local
   gather_facts: no
   environment:
    https_proxy: "xxx"
    http_proxy: "xxx"
   tasks:
    - name: Gather facts to check connectivity
      k8s_facts:
       api_key: "{{api_key}}"
       host: "{{cluster_url}}"
       kind: Project
      register: listed_projects

PS:我添加了-vvv标志,可以看到它尝试以某种方式使用代理:

  

EXEC / bin / sh -c'/ usr / bin / python && sleep 0'使用模块   文件   /usr/lib/python2.7/site-packages/ansible/modules/clustering/k8s/k8s_facts.py    PUT /root/.ansible/tmp/ansible-local-1fHx5f6/tmpDUhlNa TO   /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/AnsiballZ_k8s_facts.py    执行/ bin / sh -c'chmod u + x   /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/   /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/AnsiballZ_k8s_facts.py   && sleep 0'EXEC / bin / sh -c   'https_proxy = xxx   http_proxy = xxx   / usr / bin / python   /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/AnsiballZ_k8s_facts.py   && sleep 0'EXEC / bin / sh -c'rm -f -r   /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/>   / dev / null 2>&1 && sleep 0'

1 个答案:

答案 0 :(得分:2)

我同意@ ilias-sp,但似乎k8s/common.py不支持configuration.proxy attribute,并且据我所知,urllib3不支持这些代理环境变量, urllib的正常方式,而是选择使用由显式构造函数kwarg驱动的自己的ProxyManager

但是,由于ansible的“替代”机制,我相信您可以测试以下理论:

  1. k8s_facts.py复制到剧本的library文件夹中
  2. 修改它以显示AUTH_ARG_MAP中的proxy,我相信下面的补丁可以做到(该补丁针对v2.8.5,因此如果您的版本不同,则可能需要弄弄它)
  3. 在新的proxy:模块上明确设置k8s_facts属性,看看它是否有效

    - k8s_facts:
        host: api-server-whatever
        kind: Project
        proxy: http://my-proxy:3128
    
  4. 假设确实如此,open an issue in ansible让他们知道
--- a/library/k8s_facts.py  2019-10-08 22:23:24.000000000 -0700
+++ b/library/k8s_facts.py  2019-10-08 22:24:50.000000000 -0700
@@ -130,13 +130,14 @@
 '''


-from ansible.module_utils.k8s.common import KubernetesAnsibleModule, AUTH_ARG_SPEC
+from ansible.module_utils.k8s.common import KubernetesAnsibleModule, AUTH_ARG_SPEC, AUTH_ARG_MAP
 import copy


 class KubernetesFactsModule(KubernetesAnsibleModule):

     def __init__(self, *args, **kwargs):
+        AUTH_ARG_MAP['proxy'] = 'proxy'
         KubernetesAnsibleModule.__init__(self, *args,
                                          supports_check_mode=True,
                                          **kwargs)
@@ -163,6 +164,7 @@
                 namespace=dict(),
                 label_selectors=dict(type='list', default=[]),
                 field_selectors=dict(type='list', default=[]),
+                proxy=dict(type='str', required=False),
             )
         )
         return args