我使用minikube设置了一个本地kubernetes集群。在我的集群上,我只有一个部署正在运行,并连接了一个服务。我在端口30100上使用了一个NodePort来暴露服务,因此我可以从浏览器或通过curl访问它。
下面是我用来设置集群的python-server.yml
文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-server-deployment
namespace: kubernetes-hello-world
labels:
app: python-server
spec:
replicas: 1
selector:
matchLabels:
app: python-server
template:
metadata:
labels:
app: python-server
spec:
containers:
- name: python-hello-world
image: hello-world-python:latest
imagePullPolicy: Never
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: python-server-internal-service
namespace: kubernetes-hello-world
spec:
type: NodePort
selector:
app: python-server
ports:
- protocol: TCP
port: 80
targetPort: 5000
nodePort: 30100
我的python-hello-world
图像基于这个python文件:
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
html = """
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<meta charset="utf-8">
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
"""
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(bytes(html, "utf-8"))
def run():
addr = ('', 5000)
httpd = HTTPServer(addr, MyServer)
httpd.serve_forever()
if __name__ == '__main__':
run()
当我运行集群时,我可以像预期的那样接收到带有curl {node_ip}:30100
的hello world html。但是当我试图通过浏览器使用相同的ip:port访问我的服务时,我得到了超时。我读到这可能是由于缺少头文件造成的,但我认为我的python文件中包含了所有必要的头文件,所以还有什么可能导致这种情况?
1条答案
按热度按时间hwamh0ep1#
这并不是说你到达了你的节点的IP(如果需要的话,你应该提供一些关于环境的更多信息)。
但你可以端口转发服务,并很容易达到它。
看看这里:https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
其他doc:How kubectl port-forward works?