如何解决从 docker 容器中代理后面的 minikube VM 内部连接到外部网络
我在 Minikube VM 中有一个活动的 kubernetes 集群(使用 VirtualBox 作为驱动程序),所以为了部署新容器,我可以下载图像,因为这个连接已经使用 istio 服务布局,现在如果我 ssh 到我的 minikube VM首先,我无法 wget https 内容,但是在设置代理和 no_proxies 后连接了 http 内容,但是如果我想从容器内部访问任何链接,请说带有 python 图像和 urllib 库的简单 pod,我想从在这个 pod 内,然后从任何链接(例如 http://python.org)打印内容我无法这样做,我得到的只是没有路由到日志中的主机错误,这表明连接存在一些问题由于代理。
def basic():
import urllib.request
print("inside basic funtion")
with urllib.request.urlopen('http://python.org/') as response:
html = response.read()
print(html)
这是我从容器内部作为管道组件运行的 python 代码。
我最近遇到的错误-
Traceback (most recent call last):
File "/usr/local/lib/python3.7/urllib/request.py",line 1317,in do_open
encode_chunked=req.has_header('Transfer-encoding'))
File "/usr/local/lib/python3.7/http/client.py",line 1229,in request
self._send_request(method,url,body,headers,encode_chunked)
File "/usr/local/lib/python3.7/http/client.py",line 1275,in _send_request
self.endheaders(body,encode_chunked=encode_chunked)
File "/usr/local/lib/python3.7/http/client.py",line 1224,in endheaders
self._send_output(message_body,line 1016,in _send_output
self.send(msg)
File "/usr/local/lib/python3.7/http/client.py",line 956,in send
self.connect()
File "/usr/local/lib/python3.7/http/client.py",line 928,in connect
(self.host,self.port),self.timeout,self.source_address)
File "/usr/local/lib/python3.7/socket.py",line 727,in create_connection
raise err
File "/usr/local/lib/python3.7/socket.py",line 716,in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Operation timed out
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "<string>",line 11,in <module>
File "<string>",line 3,in basic
File "/usr/local/lib/python3.7/urllib/request.py",line 222,in urlopen
return opener.open(url,data,timeout)
File "/usr/local/lib/python3.7/urllib/request.py",line 525,in open
response = self._open(req,data)
File "/usr/local/lib/python3.7/urllib/request.py",line 543,in _open
'_open',req)
File "/usr/local/lib/python3.7/urllib/request.py",line 503,in _call_chain
result = func(*args)
File "/usr/local/lib/python3.7/urllib/request.py",line 1345,in http_open
return self.do_open(http.client.HTTPConnection,line 1319,in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 110] Operation timed out>
我已经开始 minikube 作为-
minikube start --cpus 6 --memory 12288 --disk-size=80g --extra-config=apiserver.service-account-issuer=api --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/apiserver.key --extra-config=apiserver.service-account-api-audiences=api --kubernetes-version v1.14.0
在设置环境变量之后。
更新: 我创建了一个不同的容器只是为了从组件内部检查卷曲 -(我使用 kfp 库来创建容器)
def curl_op(text):
return dsl.ContainerOp(
name='curl',image='tutum/curl',command=['sh','-c'],arguments=['curl -x http://<proxy-server>:<proxy-port> "$0"',text]
)
所以使用上述参数我可以连接到外部链接,这再次确定我需要创建带有代理设置的容器。
解决方法
所以为了运行我提到的作为管道组件的上述 python 代码。 我使用 os 库添加了环境变量,这个单独的部分能够连接到外部网络。 更新了python代码-
def basic():
import urllib.request
import os
proxy = 'http://proxy-path:port'
os.environ['http_proxy'] = proxy
os.environ['HTTP_PROXY'] = proxy
os.environ['https_proxy'] = proxy
os.environ['HTTPS_PROXY'] = proxy
print("inside basic funtion")
with urllib.request.urlopen('http://python.org/') as response:
html = response.read()
print(html)
如果 docker 镜像是从头开始创建的,而没有借助管道库函数,那么我们只需要在基础镜像调用后按照通常的方式将 env 详细信息添加到我们的 dockerfile 中-
ENV HTTP_PROXY http://proxy-path:port
ENV HTTPS_PROXY http://proxy-path:port
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。