Я использую клиент kuberentes-python для отправки запросов в кластер Kubernetes.
Я использую только токен на предъявителя без сертификата для отправки запросов API. Поэтому соединение не может быть проверено - небезопасное соединение, и я получаю предупреждения:
/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
Я знаю, как подавить эти сообщения, и есть способ сделать это .
Я добавил в код следующие строки:
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Это сработало! Я больше не получаю предупреждений в PyCharm.
Но когда я запустил код Python из оболочки python3 myapp.py
, предупреждение все еще существовало.
У меня есть обходной путь: export PYTHONWARNINGS="ignore:Unverified HTTPS request"
, но он работает только в том случае, если вы запускаете его из оболочки перед запуском сценария, и я предпочел, чтобы это было из кода.
Мои вопросы , почему предупреждения были подавлены PyCharm, а не из оболочки ?
Это мой код, если вы хотите его протестировать (просто измените хост и токен):
from kubernetes import client
import os
from kubernetes.client import Configuration
SERVICE_TOKEN_FILENAME = "/home/ubuntu/root-token"
class InClusterConfigLoader(object):
def __init__(self, token_filename):
self._token_filename = token_filename
def load_and_set(self):
self._load_config()
self._set_config()
def _load_config(self):
self.host = "https://10.0.62.0:8443"
if not os.path.isfile(self._token_filename):
print("Service token file does not exists.")
with open(self._token_filename) as f:
self.token = f.read().rstrip('\n')
if not self.token:
print("Token file exists but empty.")
def _set_config(self):
configuration = Configuration()
configuration.host = self.host
configuration.ssl_ca_cert = None
configuration.verify_ssl = False
configuration.api_key['authorization'] = "bearer " + self.token
Configuration.set_default(configuration)
def load_incluster_config():
InClusterConfigLoader(token_filename=SERVICE_TOKEN_FILENAME).load_and_set()
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
load_incluster_config()
api = client.CoreV1Api()
service_accounts = api.list_service_account_for_all_namespaces()
print(len(service_accounts.items))