0
votes

Comment se connecter à l'API Microk8S via Python Kubettes Client?

J'essaie de vous connecter à mon cluster KubeNettes Microk8s qui écoute sur le port 16443 avec le Python KuberNettes Client : xxx pré>

si je définit aucun des champs cert_file code>, key_file code> ou api_key code> de la configuration dans l'exemple, la connexion échoue en raison de p> xxx pré>

si je spécifie le apié_key code> comme indiqué dans le code ci-dessus, je reçois p >

  File "/home/richter/examples/kubernetes-python/kubernetes-python-port-ignored/venv/lib/python3.7/site-packages/urllib3/util/retry.py", line 399, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='localhost', port=16443): Max retries exceeded with url: /api/v1/pods?watch=False (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)')))


0 commentaires

3 Réponses :


0
votes

Votre vérification SSL échoue aux contrôles TLS. Le correctif le plus simple et le plus rapide consiste à définir votre configuration Kube pour ignorer TLS-Verify car vous utilisez un seul nœud. xxx


0 commentaires

2
votes

Vous devez passer la trajectoire sur le fichier ca.crt à configuration.ssl_ca_cert = 'ca.crt' code>.

import kubernetes.client

<<<pay attention here next five lines of code>>>
configuration = kubernetes.client.Configuration()
configuration.ssl_ca_cert = 'ca.crt'
configuration.api_key['authorization'] = 'ZXXXXXXXXXXdw=='
configuration.api_key_prefix['authorization'] = 'Bearer'
configuration.host = 'https://aaaaaaaaaaaaaaa.gr7.us-east-1.eks.amazonaws.com'

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

api_response = api_instance.list_namespace()
for i in api_response.items:
    print(i.metadata.name)


1 commentaires

Une chose que je dois mentionner est jeton que vous utilisez à partir de par défaut l'utilisateur n'est peut-être pas suffisante pour fonctionner avec des espaces de noms. Créez un SVICEACCOUNT et donnez-lui suffisamment d'autorisations à l'aide de CLUSTREROLEBINDING . Ensuite, utilisez ce Token ServiceAccount pour accéder aux espaces de noms. @Karlrichter



0
votes

Ceci fonctionne pour AWS Eks Cluster:

import boto3
import kubernetes
import os
import base64

eks = boto3.client('eks')

eks_cluster_name = os.environ['EKS_CLUSTER_NAME']
eks_api_key = os.environ['EKS_API_KEY']

eksresponse = eks.describe_cluster(
    name=eks_cluster_name
)

ca_file = open("/tmp/ca.crt", "wb")
n = ca_file.write(base64.b64decode(eksresponse['cluster']['certificateAuthority']['data']))
ca_file.close()

configuration = kubernetes.client.Configuration()

configuration.ssl_ca_cert = '/tmp/ca.crt'
configuration.api_key['authorization'] = eks_api_key
configuration.api_key_prefix['authorization'] = 'Bearer'
configuration.host = eksresponse['cluster']['endpoint']

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

api_response = api_instance.list_pod_for_all_namespaces()
for i in api_response.items:
    print(i.metadata.name)


0 commentaires