minikube - 如何使用 curl 通过 pod ip 访问 pod
minikube - how to access pod via pod ip using curl
我使用 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
然后,我将 pods' 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
minikube ssh
- 登录 minikube VM
然后,我可以使用curl <podIP>:<podPort>
,因为我的情况是curl 172.17.0.18:8080
该命令是正确的,但它只适用于可以访问覆盖网络的机器。 (对于 minikube,主机默认没有)。
您可以通过以下方式为您的广告连播设置代理:
kubectl port-forward [name of your pod] [pod port]
此后您可以(从另一个 shell):
curl 127.0.0.1:port/path
首先,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 的虚拟机并从那里查询。
我使用 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
然后,我将 pods' ip 打印到标准输出:
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
使用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
minikube ssh
- 登录 minikube VM然后,我可以使用
curl <podIP>:<podPort>
,因为我的情况是curl 172.17.0.18:8080
该命令是正确的,但它只适用于可以访问覆盖网络的机器。 (对于 minikube,主机默认没有)。
您可以通过以下方式为您的广告连播设置代理:
kubectl port-forward [name of your pod] [pod port]
此后您可以(从另一个 shell):
curl 127.0.0.1:port/path
首先,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 的虚拟机并从那里查询。