MCPcopy Index your code
hub / github.com/kubernetes-client/python / kubernetes_create_connection

Function kubernetes_create_connection

examples/pod_portforward.py:128–176  ·  view source on GitHub ↗
(address, *args, **kwargs)

Source from the content-addressed store, hash-verified

126 socket_create_connection = socket.create_connection
127
128 def kubernetes_create_connection(address, *args, **kwargs):
129 dns_name = address[0]
130 if isinstance(dns_name, bytes):
131 dns_name = dns_name.decode()
132 dns_name = dns_name.split(".")
133 if dns_name[-1] != 'kubernetes':
134 return socket_create_connection(address, *args, **kwargs)
135 if len(dns_name) not in (3, 4):
136 raise RuntimeError("Unexpected kubernetes DNS name.")
137 namespace = dns_name[-2]
138 name = dns_name[0]
139 port = address[1]
140 if len(dns_name) == 4:
141 if dns_name[1] in ('svc', 'service'):
142 service = api_instance.read_namespaced_service(name, namespace)
143 for service_port in service.spec.ports:
144 if service_port.port == port:
145 port = service_port.target_port
146 break
147 else:
148 raise RuntimeError(
149 f"Unable to find service port: {port}")
150 label_selector = []
151 for key, value in service.spec.selector.items():
152 label_selector.append(f"{key}={value}")
153 pods = api_instance.list_namespaced_pod(
154 namespace, label_selector=",".join(label_selector)
155 )
156 if not pods.items:
157 raise RuntimeError("Unable to find service pods.")
158 name = pods.items[0].metadata.name
159 if isinstance(port, str):
160 for container in pods.items[0].spec.containers:
161 for container_port in container.ports:
162 if container_port.name == port:
163 port = container_port.container_port
164 break
165 else:
166 continue
167 break
168 else:
169 raise RuntimeError(
170 f"Unable to find service port name: {port}")
171 elif dns_name[1] != 'pod':
172 raise RuntimeError(
173 f"Unsupported resource type: {dns_name[1]}")
174 pf = portforward(api_instance.connect_get_namespaced_pod_portforward,
175 name, namespace, ports=str(port))
176 return pf.socket(port)
177 socket.create_connection = kubernetes_create_connection
178
179 # Access the nginx http server using the

Callers

nothing calls this directly

Calls 4

socketMethod · 0.80
itemsMethod · 0.45
list_namespaced_podMethod · 0.45

Tested by

no test coverage detected