[英]How to access non containerised DB on remote IP from a docker container?
[英]How to access a container from node ip started using docker run
我有一个 web 应用程序,我试图在 k8s 集群上运行。 我从 DockerFile 构建图像并使用以下命令在本地进行测试:
docker run --name web-app -d -p 8888:80 web-app
我能够使用 http://localhost:8888 访问 GUI。
现在,我试图在 k8s 集群中运行它,所以我在我的 k8s 集群中执行了相同的 docker 运行命令,当我尝试从我的集群中访问 curl http://localhost:8888 时,我得到了 o/p。 但这不是我想要的生产环境,我想使用节点 ip 访问 web 应用程序,例如 http://<node_ip>:8888。 我尝试了几次但无法使用节点 ip 访问它。
现在,我有两个问题:
对于 NodePort 类型的服务,您需要输入<node_ip>:<nodePort>
。 NodePort 是您在服务中暴露最多的端口。
kubectl get nodes -o wide
: 获取 NodeIP 例如,在此服务清单中,节点端口为31000
。 请记住一件事, nodePort
范围是从 30000 到 32767。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 31000
如果您在 kube.netes 中部署应用程序,则不需要运行 docker。 您是否在 k8s 中创建了应用程序的部署? 如果是,那么您可以通过kubectl exec -it <pod_nam> sh
进入您的应用程序。 如果你想从集群外部进行通信,你需要像我说的那样创建 se NodePort 类型的服务,然后你可以通过http://<node_ip>:<node_port>
获得访问权限。
这里我以部署一个yaml为例。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.1
ports:
- containerPort: 80
顺便说一句,您在部署中的containerPort
必须等于服务中的targetPort
。
看来您正在尝试使用错误的端口。 8888
这不是NodePort
。 NodePort
范围是(30000-32767)
。 最好查看确切的nodeport
。
试试这个命令kubectl get svc
。 output 将是这样的。
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 17h
test-srv NodePort 10.102.92.219 <none> 4000:31553/TCP 9s
对于test-srv
服务,节点端口是31553
。 你可以找到你的节点的 IP
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kind-control-plane Ready master 17h v1.18.2 172.18.0.2 <none> Ubuntu 19.10 5.8.0-41-generic containerd://1.3.3-14-g449e9269
对我来说,nodeIp 是172.18.0.2
。 现在试试curl -k 172.18.0.2:31553
。 模板类似于<node_ip>:<node_port>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.