Minikube 服务 URL 不工作
Minikube service URL not working
我是 Kubernetes 的新手,正在学习。我有我的 Windows 8 机器,我在其中安装了 Vagrant。使用 vagrant 我是 运行ning ubuntu VM,在那个 VM 里面我是 运行ning 3 docker 容器。
Vagrant 文件:
Vagrant.configure(2) do |config|
config.vm.box = "test"
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 50000, host: 50000
config.vm.network "forwarded_port", guest: 8081, host: 8089
config.vm.network "forwarded_port", guest: 9000, host: 9000
config.vm.network "forwarded_port", guest: 3306, host: 3306
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
end
Ubuntu VM 中的容器:
root@vagrant-ubuntu-trusty:~/docker-containers# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockercontainers_jenkins latest bb1142706601 4 days ago 1.03GB
dockercontainers_sonar latest 3f021a73750c 4 days ago 1.61GB
dockercontainers_nexus latest ddc31d7ad052 4 days ago 1.06GB
jenkins/jenkins lts 279f21046a63 4 days ago 813MB
openjdk 8 7c57090325cc 5 weeks ago 737MB
现在我在同一个 VM 中安装了 minikube 和 kubectl,如 link
中所述
minikube 版本:
minikube version: v0.24.1
kubectl 版本:
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T11:52:23Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}
Minikube 在我的 ubuntu VM 中成功启动。我创建了 pod.yml
文件。
apiVersion: v1
kind: Pod
metadata:
name: testsonaralm
labels:
app: sonar_alm
spec:
containers:
- name: alm-sonar
image: dockercontainers_sonar:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
使用这个 yml 文件,我在 minikube 中创建了一个 pod
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl create -f test_pod.yml
pod "testsonaralm" created
现在我使用 kubectl
命令创建了一个服务。
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl expose pod testsonaralm --port=9000 --target-port=9000 --name almsonar
service "almsonar" exposed
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
almsonar ClusterIP 10.102.86.193 <none> 9000/TCP 10s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d
当我尝试从我的主机访问 URL 时,我得到 "Network Error"。
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl describe svc almsonar
Name: almsonar
Namespace: default
Labels: app=sonar_alm
Annotations: <none>
Selector: app=sonar_alm
Type: ClusterIP
IP: 10.101.237.223
Port: <unset> 9000/TCP
TargetPort: 9000/TCP
Endpoints: 172.17.0.1:9000
Session Affinity: None
Events: <none>
root@vagrant-ubuntu-trusty:~/docker-containers# minikube ip
127.0.0.1
当我执行 minikube service almsonar --url
命令时,我得到一个空响应。所以我删除了该服务并使用修改后的命令创建了一个新服务。
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl expose pod testsonaralm --type=NodePort --name almsonar
service "almsonar" exposed
现在当我 运行 minikube service almsonar --url
命令时,我得到一个 URL 作为
root@vagrant-ubuntu-trusty:~/docker-containers# minikube service almsonar --url
http://127.0.0.1:31209
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl describe svc almsonar
Name: almsonar
Namespace: default
Labels: app=sonar_alm
Annotations: <none>
Selector: app=sonar_alm
Type: NodePort
IP: 10.101.192.1
Port: <unset> 9000/TCP
TargetPort: 9000/TCP
NodePort: <unset> 30600/TCP
Endpoints: 172.17.0.1:9000
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
root@vagrant-ubuntu-trusty:~/docker-containers# minikube ip
127.0.0.1
我无法在我的 Ubuntu 虚拟机中访问此 URL,
root@vagrant-ubuntu-trusty:~/docker-containers# curl http://127.0.0.1:31209
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
当我阅读 Kubernetes 文档时,minikube 服务 URL 将有一个有效的 IP。但在我的例子中 URL 包含本地主机 IP 地址。
据我所知,您在 Ubuntu VM 中执行了 minikube start
。默认情况下,这将尝试下载 minikube ISO 并启动另一个 VM(VM 内的 VM),其中 minikube 为 运行。
我认为这种嵌套虚拟化导致您的安装出现问题。如果出于某种原因,minikube 以 --vm-driver=none
开始以避免 VM 内部的 VM(我认为是这种情况,查看 127.0.0.1 UP),有一些功能处于测试阶段(到时候这个答案是写的),这可以解释奇怪的行为。因此,我的第一个建议是在 Windows 主机内执行 minikube,以便它在 virtualbox 内启动一个 VM。您可以在其中重现您之前拥有的容器环境,并从 Windows 主机执行 kubectl 命令。大多数文档都采用此设置,因此您不会在本地主机中看到类似 127.0.0.1 的差异。
在任何情况下,为了进行完全重定向并检查服务是否 运行,请尝试像这样执行 curl 命令:
curl -L http://127.0.0.1:31209
您在使用端口号 80 创建 pod 或部署时犯了一个错误。这就是为什么您的 URL 服务无法正常工作,因为 80 端口已经繁忙。您需要使用其他端口号,例如 8080。
例如:
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
$ kubectl expose pod hello-minikube --type=NodePort
$ minikube service hello-minikube --url
如果您运行使用 Docker 驱动程序连接 minikube,则需要做一些 port-forwarding。打开一个单独的命令行终端和 运行 以下命令(保持 window 打开):
> kubectl port-forward service/hello-minikube 54080:8080
现在在您的原始命令行中 window 运行 您的服务:
> minikube service hello-minikube
现在您可以访问 http://localhost:54080 并且一切正常。
我是 Kubernetes 的新手,正在学习。我有我的 Windows 8 机器,我在其中安装了 Vagrant。使用 vagrant 我是 运行ning ubuntu VM,在那个 VM 里面我是 运行ning 3 docker 容器。
Vagrant 文件:
Vagrant.configure(2) do |config|
config.vm.box = "test"
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 50000, host: 50000
config.vm.network "forwarded_port", guest: 8081, host: 8089
config.vm.network "forwarded_port", guest: 9000, host: 9000
config.vm.network "forwarded_port", guest: 3306, host: 3306
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
end
Ubuntu VM 中的容器:
root@vagrant-ubuntu-trusty:~/docker-containers# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockercontainers_jenkins latest bb1142706601 4 days ago 1.03GB
dockercontainers_sonar latest 3f021a73750c 4 days ago 1.61GB
dockercontainers_nexus latest ddc31d7ad052 4 days ago 1.06GB
jenkins/jenkins lts 279f21046a63 4 days ago 813MB
openjdk 8 7c57090325cc 5 weeks ago 737MB
现在我在同一个 VM 中安装了 minikube 和 kubectl,如 link
中所述minikube 版本:
minikube version: v0.24.1
kubectl 版本:
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T11:52:23Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}
Minikube 在我的 ubuntu VM 中成功启动。我创建了 pod.yml
文件。
apiVersion: v1
kind: Pod
metadata:
name: testsonaralm
labels:
app: sonar_alm
spec:
containers:
- name: alm-sonar
image: dockercontainers_sonar:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
使用这个 yml 文件,我在 minikube 中创建了一个 pod
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl create -f test_pod.yml
pod "testsonaralm" created
现在我使用 kubectl
命令创建了一个服务。
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl expose pod testsonaralm --port=9000 --target-port=9000 --name almsonar
service "almsonar" exposed
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
almsonar ClusterIP 10.102.86.193 <none> 9000/TCP 10s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d
当我尝试从我的主机访问 URL 时,我得到 "Network Error"。
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl describe svc almsonar
Name: almsonar
Namespace: default
Labels: app=sonar_alm
Annotations: <none>
Selector: app=sonar_alm
Type: ClusterIP
IP: 10.101.237.223
Port: <unset> 9000/TCP
TargetPort: 9000/TCP
Endpoints: 172.17.0.1:9000
Session Affinity: None
Events: <none>
root@vagrant-ubuntu-trusty:~/docker-containers# minikube ip
127.0.0.1
当我执行 minikube service almsonar --url
命令时,我得到一个空响应。所以我删除了该服务并使用修改后的命令创建了一个新服务。
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl expose pod testsonaralm --type=NodePort --name almsonar
service "almsonar" exposed
现在当我 运行 minikube service almsonar --url
命令时,我得到一个 URL 作为
root@vagrant-ubuntu-trusty:~/docker-containers# minikube service almsonar --url
http://127.0.0.1:31209
root@vagrant-ubuntu-trusty:~/docker-containers# kubectl describe svc almsonar
Name: almsonar
Namespace: default
Labels: app=sonar_alm
Annotations: <none>
Selector: app=sonar_alm
Type: NodePort
IP: 10.101.192.1
Port: <unset> 9000/TCP
TargetPort: 9000/TCP
NodePort: <unset> 30600/TCP
Endpoints: 172.17.0.1:9000
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
root@vagrant-ubuntu-trusty:~/docker-containers# minikube ip
127.0.0.1
我无法在我的 Ubuntu 虚拟机中访问此 URL,
root@vagrant-ubuntu-trusty:~/docker-containers# curl http://127.0.0.1:31209
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
当我阅读 Kubernetes 文档时,minikube 服务 URL 将有一个有效的 IP。但在我的例子中 URL 包含本地主机 IP 地址。
据我所知,您在 Ubuntu VM 中执行了 minikube start
。默认情况下,这将尝试下载 minikube ISO 并启动另一个 VM(VM 内的 VM),其中 minikube 为 运行。
我认为这种嵌套虚拟化导致您的安装出现问题。如果出于某种原因,minikube 以 --vm-driver=none
开始以避免 VM 内部的 VM(我认为是这种情况,查看 127.0.0.1 UP),有一些功能处于测试阶段(到时候这个答案是写的),这可以解释奇怪的行为。因此,我的第一个建议是在 Windows 主机内执行 minikube,以便它在 virtualbox 内启动一个 VM。您可以在其中重现您之前拥有的容器环境,并从 Windows 主机执行 kubectl 命令。大多数文档都采用此设置,因此您不会在本地主机中看到类似 127.0.0.1 的差异。
在任何情况下,为了进行完全重定向并检查服务是否 运行,请尝试像这样执行 curl 命令:
curl -L http://127.0.0.1:31209
您在使用端口号 80 创建 pod 或部署时犯了一个错误。这就是为什么您的 URL 服务无法正常工作,因为 80 端口已经繁忙。您需要使用其他端口号,例如 8080。
例如:
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
$ kubectl expose pod hello-minikube --type=NodePort
$ minikube service hello-minikube --url
如果您运行使用 Docker 驱动程序连接 minikube,则需要做一些 port-forwarding。打开一个单独的命令行终端和 运行 以下命令(保持 window 打开):
> kubectl port-forward service/hello-minikube 54080:8080
现在在您的原始命令行中 window 运行 您的服务:
> minikube service hello-minikube
现在您可以访问 http://localhost:54080 并且一切正常。