【问题标题】:minikube - how to access pod via pod ip using curlminikube - 如何使用 curl 通过 pod ip 访问 pod
【发布时间】:2018-11-06 22:24:42
【问题描述】:

我使用minikube创建本地kubernetes集群。

我通过webapp-rc.yaml 文件创建ReplicationController

apiVersion: v1
kind: ReplicationController
metadata:
  name: webapp
spec:
  replicas: 2
  template: 
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: tomcat
        ports:
        - containerPort: 8080

并且,我将 pod 的 ip 打印到标准输出:

kubectl get pods -l app=webapp -o yaml | grep podIP

podIP: 172.17.0.18
podIP: 172.17.0.1

而且,我想使用 curl 访问 pod

curl 172.17.0.18:8080

但是,标准输出给我:curl: (52) Empty reply from server

我知道我可以通过服务访问 pod 中 docker 容器中的应用程序。

我在一本书中找到了这段代码。但是书中并没有给出执行这段代码的context

使用minikube,如何在宿主机中使用curl通过pod ip访问pod?

更新 1

我找到了使用kubectl proxy的方法:

➜  ~ kubectl proxy
Starting to serve on 127.0.0.1:8001

然后我可以像这样通过 curl 访问 pod:

curl http://localhost:8001/api/v1/namespaces/default/pods/webapp-jkdwz/proxy/

webapp-jkdwz可以通过命令kubectl get pods -l app=webapp找到

更新 2

  1. minikube ssh - 登录 minikube 虚拟机

  2. 然后,我可以使用curl <podIP>:<podPort>,因为我的情况是curl 172.17.0.18:8080

【问题讨论】:

    标签: kubernetes minikube


    【解决方案1】:

    首先,tomcat 镜像暴露端口 8080 而不是 80,所以正确的 YAML 应该是:

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: webapp
    spec:
      replicas: 2
      template: 
        metadata:
          name: webapp
          labels:
            app: webapp
        spec:
          containers:
          - name: webapp
            image: tomcat
            ports:
            - containerPort: 8080
    

    minikube 在虚拟机内执行,因此 curl 172.17.0.18:8080 只能在该虚拟机内工作。

    您始终可以创建服务来公开您的应用:

    kubectl expose rc webapp --type=NodePort
    

    并使用以下命令获取 URL:

    minikube service webapp --url
    

    如果需要查询特定的pod,使用port forwarding

    kubectl port-forward <POD NAME> 8080
    

    或者只是 ssh 进入 minikube 的虚拟机并从那里查询。

    【讨论】:

    • 谢谢。我更改了tomcat公开默认端口。 port-forward 工作正常。如何找到我的 minikube 的 VM ip 和端口,以便我可以 ssh 进入它?
    • 你找到了 ;) minikube ssh
    【解决方案2】:

    该命令是正确的,但它只适用于可以访问覆盖网络的机器。 (在 minikube 的情况下,主机默认没有)。

    您可以通过以下方式为您的 pod 设置代理:

    kubectl port-forward [name of your pod] [pod port]
    

    此后您可以(从另一个 shell):

    curl 127.0.0.1:port/path
    

    另请参阅:https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/#forward-a-local-port-to-a-port-on-the-pod

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 2020-11-10
      • 2020-03-21
      • 2020-07-19
      • 2021-07-09
      相关资源
      最近更新 更多