代码之家  ›  专栏  ›  技术社区  ›  Lin Du Correcter

minikube-如何使用curl通过pod ip访问pod

  •  5
  • Lin Du Correcter  · 技术社区  · 7 年前

    我用 minikube 创建本地kubernetes集群。

    我创造 ReplicationController 通过 webapp-rc.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
    

    然后,我将pods的IP打印到stdout:

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

    podIP: 172.17.0.18
    podIP: 172.17.0.1
    

    我想用 curl

    curl 172.17.0.18:8080

    但是,性传播疾病给了我: curl: (52) Empty reply from server

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

    我在一本书中找到了这个密码。但是这本书没有给出 context 执行此代码。

    使用 小型化 如何在主机中使用curl通过pod ip访问pod?

    更新1

    我找到了一种方法 kubectl proxy :

    ➜  ~ kubectl proxy
    Starting to serve on 127.0.0.1:8001
    

    然后我可以通过这样的弯曲来访问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 vm

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

    2 回复  |  直到 6 年前
        1
  •  9
  •   Ignacio Millán    7 年前

    首先,Tomcat Image公开端口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的虚拟机并从那里进行查询。

        2
  •  3
  •   Janos Lenart    7 年前

    该命令是正确的,但它只能在可以访问覆盖网络的计算机上工作。(在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

    推荐文章