Тайм-аут соединения k8s_api в конвейере Jenkins - PullRequest
4 голосов
/ 11 апреля 2019

Я хотел бы перечислить пространства имен, присутствующие в кластере, используя API Kubernetes, то есть, используя метод list_namespace.

Когда я запускаю приведенный ниже код с моей машины Linux, он работает нормально.

Я создал конвейерное задание Jenkins и вызвал файл python, как показано ниже, из-за его ошибки Connection Timeout.

Если я делаю kubectl get ns в том же файле Jenkins, я получаю вывод.

Я думал, что прокси не позволяют этого. Но не смог найти как это исправить.

Мой код Python:

config.load_kube_config(os.environ['KUBE_CONFIG'])
v1_api = client.CoreV1Api()
api_instance = kubernetes.client.CoreV1Api()

try: 
    api_response = api_instance.list_namespace(limit="1")
    pprint(api_response)
except Exception as e:
    print("Exception when calling CoreV1Api->list_namespace: %s\n" % e)

sys.exit("EXITING")

Команда, которую я выполнил:

export KUBE_CONFIG=${env.WORKSPACE}/.kube/kube_config
python36 listns.py 

Ошибка:

ПРЕДУПРЕЖДЕНИЕ Повторная попытка (Повторная попытка (всего = 0, подключение = Нет, чтение = Нет, redirect = Нет, статус = Нет)) после разрыва соединения 'NewConnectionError (': не удалось установить новое соединение: [Errno 110] Тайм-аут соединения ',)': / api / v1 / namespaces? Limit = 1

Исключение при вызове CoreV1Api-> list_namespace: HTTPSConnectionPool (host = 'XXXXXXX', port = xxxx): превышено максимальное количество попыток с url: / api / v1 / namespaces? limit = 1 (вызвано NewConnectionError (': не удалось установить новое соединение: [Errno 110] Тайм-аут соединения ',))

1 Ответ

0 голосов
/ 16 апреля 2019

Получил исправление, передав прокси используя класс конфигурации:

configuration = kubernetes.client.Configuration()
configuration.proxy='http://www-proxy-<myproxyserver>'

api_instance = kubernetes.client.ApiClient(configuration)
...