Kubernetes Python客户端:使用Autobahn websocket连接到pod /服务/使用bearer token连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes Python客户端:使用Autobahn websocket连接到pod /服务/使用bearer token连接相关的知识,希望对你有一定的参考价值。

我的情况:

  • 现有的Docker容器映像,通过例如端口5000的websocket暴露其服务。部署后,websocket的服务在端口5000上再次暴露在主机上。
  • 使用Autobahn's websocketsTwisted通过websocket连接到此服务的现有Python客户端。
  • Kubernetes集群在一个pod中运行一个前面提到的Docker容器映像,再次在端口5000上公开它的服务。该pod的服务有一个关联的Service资源,但该服务不能直接从集群外部访问,除非通过集群API使用proxy动词。

我现在想要将我的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获得持有者令牌。

以上是关于Kubernetes Python客户端:使用Autobahn websocket连接到pod /服务/使用bearer token连接的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes 阻止混合活动内容

无法连接到 kubernetes python api - .kube/config 文件未找到

python应用 曲线拟合 02

轻松学Kubernetes 的包管理器-Helm

展平 python 数据框中的条目,如 Apache PIG 包

kubernetes 客户端KubeClient使用及常用api