【问题标题】:Minikube service URL not workingMinikube 服务 URL 不起作用
【发布时间】:2018-07-02 02:24:48
【问题描述】:

我是 Kubernetes 新手,我正在学习。我有安装 Vagrant 的 Windows 8 机器。使用 vagrant 我正在运行 ubuntu VM,在该 VM 内我正在运行 3 个 docker 容器。

流浪文件:

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

现在我在同一个虚拟机中安装了 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 虚拟机中成功启动。我已经创建了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 时,我收到“网络错误”。

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 包含 localhost IP 地址。

【问题讨论】:

  • 请分享kubectl describe svc almsonarminikube ip的输出
  • 用 kubectl describe svc almsonar 和 minikube ip output 更新了我的问题
  • 你选择哪个驱动来创建 minikube?
  • 我没有选择任何驱动程序。我刚刚执行了minikube start 命令
  • 当我执行kubectl get node 命令时,我得到的输出为NAME STATUS ROLES AGE VERSION vagrant-ubuntu-trusty Ready &lt;none&gt; 3d v1.8.0

标签: ubuntu docker vagrant kubernetes minikube


【解决方案1】:

据我所知,您在 Ubuntu 虚拟机中执行了 minikube start。默认情况下,这将尝试下载 minikube ISO 并启动另一个运行 minikube 的 VM(VM 内的 VM)。

我认为这种嵌套虚拟化会导致您的安装出现问题。如果出于某种原因,minikube 以 --vm-driver=none 开头以避免 VM 内部的 VM(我认为是这种情况,请查看 127.0.0.1 UP),则有一些功能处于测试阶段(到此答案时)被写),这可以解释奇怪的行为。因此,我的第一个建议是在 Windows 主机内执行 minikube,以便在 virtualbox 内启动 VM。在里面,您可以重现您之前拥有的容器环境,并从 Windows 主机执行 kubectl 命令。大多数文档都采用这种设置,因此您不会在 localhost 中看到像 127.0.0.1 这样的差异。

无论如何,为了实现完全重定向并检查服务是否正在运行,请尝试执行 curl 命令,如下所示:

    curl -L http://127.0.0.1:31209

【讨论】:

【解决方案2】:

您在使用端口号 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

【讨论】:

  • 它对我不起作用...我可以 ping 192.168.49.2,但我无法使用 Web 客户端连接...例如,使用 w3m : w3m 192.168.49.2:30858。答案是 w3m:无法加载 192.168.49.2:30858
猜你喜欢
  • 2022-07-15
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2018-04-13
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多