Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在代理后面使用ansible k8s模块_Bash_Kubernetes_Proxy_Ansible - Fatal编程技术网

Bash 在代理后面使用ansible k8s模块

Bash 在代理后面使用ansible k8s模块,bash,kubernetes,proxy,ansible,Bash,Kubernetes,Proxy,Ansible,我尝试使用k8s模块运行一些ansible任务。在本地,这非常有效,但在我的Jenkins实例上,它失败,并显示以下错误消息: MaxRetryError(_池、url、错误或 ResponseError(原因))\nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool(主机='xxxxxxxxxxxxx', 端口=443):url:/version超过了最大重试次数(由 NewConnectionError(':未能建立新连接:[Errn

我尝试使用k8s模块运行一些ansible任务。在本地,这非常有效,但在我的Jenkins实例上,它失败,并显示以下错误消息:

MaxRetryError(_池、url、错误或 ResponseError(原因))\nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool(主机='xxxxxxxxxxxxx', 端口=443):url:/version超过了最大重试次数(由 NewConnectionError(':未能建立新连接:[Errno-2] 名称或服务未知',)\n“, “模块”:“, “msg”:“模块故障\n请参阅stdout/stderr以了解确切错误”, “rc”:1}

我很确定这是因为Jenkins需要一个代理来与外部世界通信。我见过如何设置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 将/root/.ansible/tmp/ansible-local-1fHx5f6/tmpDUhlNa放到 /root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/AnsiballZ_k8s_facts.py EXEC/bin/sh-c'chmod u+x /root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/ /root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/AnsiballZ_k8s_facts.py &&睡眠0'EXEC/bin/sh-c 'https_proxy=xxx http_proxy=xxx /usr/bin/python /root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/AnsiballZ_k8s_facts.py &&睡眠0'EXEC/bin/sh-c'rm-f-r /root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/> /dev/null 2>&1&&0'


我同意@ilias sp,但它似乎也不支持,而且据我所知,
urllib3
不像“普通”urllib那样尊重这些代理环境变量,而是选择使用自己的
ProxyManager
,它由显式构造函数kwarg驱动

然而,由于ansible的“覆盖”机制,我相信您可以测试这一理论:

  • k8s_facts.py
    复制到剧本的
    文件夹中
  • 修改它以在中公开
    proxy
    ,我相信下面的补丁可以做到这一点(补丁是针对v2.8.5的,因此如果您的版本不同,您可能需要修改它)
  • 在新的
    k8s\u facts
    模块上显式设置
    proxy:
    属性,然后查看它是否工作

    - k8s_facts:
        host: api-server-whatever
        kind: Project
        proxy: http://my-proxy:3128
    
  • 假设是这样,让他们知道

  • 我将重点关注
    名称或服务未知
    错误。似乎一些相关主机无法解决提到的主机问题?哇,非常感谢您的详细回答。我按照建议应用了修补程序,现在它可以工作了。我将按照您的建议创建问题。非常感谢。还有一件事,您可以帮助我实现sam吗对于“普通”k8s模块,我试过了,但我的python技能太有限,无法在足够的时间内完成这项工作。对不起,你必须与ansible的同事讨论,或者找一个“coder for hire”服务来帮你解决python问题
    --- 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