簡體   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