繁体   English   中英

如何从节点 ip 开始使用 docker 运行访问容器

[英]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 访问它。

现在,我有两个问题:

  1. 我需要在 docker 运行命令中进行哪些更改才能使用节点 IP 访问应用程序?
  2. 我还尝试使用 helm 图表运行容器并创建 NodePort 类型的服务,但它也不起作用。 使用 helm install 运行任何前端 web 应用程序时,我们需要注意什么吗?

对于 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM