pet*_*tea 5 python sockets portforwarding kubernetes
提供端口转发对象
from kubernetes.stream import stream, portforward
pf = portforward(
k8s_client_v1.connect_get_namespaced_pod_portforward,
pod_name,
name_space,
ports=port
)
pf.socket(port)
Run Code Online (Sandbox Code Playgroud)
pf是来自 family 的套接字对象AF_UNIX。
我需要更好地了解是否AF_INET必须实例化另一个系列套接字才能实现与kubectl客户端相同的功能,例如:kubectl port-forward $pod_name $port
如果有人可以分享此类实现的任何片段,我预先表示感谢。
此时创建端口转发对象的灵感来自于这里
我不是套接字方面的专家,但我设法用http.client.HTTPConnection. 我想修补requests,但无法使其工作。
无论如何,这样可以更方便地以高级方式实现 http 请求。不确定你是否在寻找那个,但我是。要查询 pod 名称、端口等,您可以检查kubernetes 的api 参考,并在 python 包中查找相应的方法。
from http.client import HTTPConnection
from kubernetes import client, config
from kubernetes.stream import portforward
from kubernetes.stream.ws_client import PortForward
class ForwardedKubernetesHTTPConnection(HTTPConnection):
def __init__(self, forwarding: PortForward, port: int):
super().__init__("127.0.0.1", port)
self.sock = forwarding.socket(port)
def connect(self) -> None:
pass
def close(self) -> None:
pass
if __name__ == "__main__":
config.load_kube_config()
client_v1 = client.CoreV1Api()
name_space = "my-namespace" # or get from api somehow
pod_name = "my-pod" # or get from api somehow
port = 80
pf = portforward(
client_v1.connect_get_namespaced_pod_portforward,
pod_name,
name_space,
ports=str(port)
)
conn = ForwardedKubernetesHTTPConnection(pf, port)
conn.request("GET", "/my/url") # will fail for other methods
resp = conn.getresponse()
print(resp.status)
print(resp.headers)
print(resp.read())
conn.request("GET", "/my/other/url")
# ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2127 次 |
| 最近记录: |