我使用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
并且,我打印了豆荚' ip to 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
执行这段代码。
使用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
答案 0 :(得分:8)
首先,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
如果您需要查询特定广告连播,请使用port forwarding:
kubectl port-forward <POD NAME> 8080
或者只是ssh进入minikube的虚拟机并从那里查询。
答案 1 :(得分:3)
该命令是正确的,但它只适用于可以访问覆盖网络的计算机。 (如果是minikube,主机默认没有)。
您可以使用以下方式设置pod的代理:
kubectl port-forward [name of your pod] [pod port]
此后你可以(来自另一个shell):
curl 127.0.0.1:port/path