Kubernetes Python 客户端:使用不记名令牌连接到 pod/service 使用高速公路 websocket/Twisted

Kubernetes Python Client: connecting to a pod/service using Autobahn websocket/Twisted using bearer token

我的情况:

我现在想升级我的 Python 客户端,不仅可以直接连接到我在 Docker 主机上的服务,还可以连接到部署在 Kubernetes 集群中的服务。也就是说,我希望 websocket 连接到我的集群的远程 API 和我的服务的代理动词。如果可能的话,我不想重写现有的 websocket 协议和处理。

我目前(有限)的理解是,对于这个约束,Kubernetes Python 客户端中的 stream 机制对我没有帮助,因为这需要完全重写我的现有 Python 代码库。

我现在的问题是(至少我认为这是这里的问题):如何从 Kubernetes 客户端获取必要的身份验证信息(Bearer 令牌?)以便将其传递给 Autobahn websocket为了从我的 Kubernetes 集群外部成功连接到我内部的服务?

from twisted.internet import reactor
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS

import kubernetes
import kubernetes.client
import kubernetes.client.configuration

# My service's websocket protocol...
class MyPrtocol(WebSocketClientProtocol):
    def onConnect(self, response):
        pass

kubernetes.config.load_kube_config()  # activates default context

# **********************
# Here I'm lost!
headers = { ... ? }
# **********************

myurl = kubernetes.client.configuration.Configuration._default.host + '/api/v1/.../proxy'
factory = WebSocketClientFactory(myurl, headers=headers)
factory.protocol = MyProtocol
connectWS(factory)
python
>>> import kubernetes
>>> from kubernetes import config
>>> config.load_kube_config()
>>> kubernetes.client.configuration.Configuration._default.api_key
{'authorization': 'Bearer ya29.GGHzBj2GQ-aaaaaaafEp1jEBKKLKJJiJ5c6-o4Mpi1P3xxxxxxxxxxxklsdRYmXq-gghD92iyoX1DyyyyyyyyyyyQDIKjLYkyzzzzzzzzz'}

这就是您如何从 kubeconfig 获取不记名令牌。