minikube 服务 url 连接被拒绝

VSK*_*VSK 1 virtualbox kubernetes kubectl minikube

我是 kubernetes 的初学者。我正在尝试安装 minikube 想在 kubernetes 中运行我的应用程序。我正在使用 ubuntu 16.04

我已按照此处提供的安装说明进行操作 https://kubernetes.io/docs/setup/learning-environment/minikube/#using-minikube-with-an-http-proxy

问题 1:安装 kubectl、virtualbox 和 minikube 后,我运行了命令

minikube start --vm-driver=virtualbox
Run Code Online (Sandbox Code Playgroud)

它因以下错误而失败

Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
E0912 17:39:12.486830   17689 start.go:305] Error restarting 
cluster:  restarting kube-proxy: waiting for kube-proxy to be 
up for configmap update: timed out waiting for the condition
Run Code Online (Sandbox Code Playgroud)

但是当我检查 virtualbox 时,我看到 minikube VM 正在运行,当我运行 kubectl 时

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10

Run Code Online (Sandbox Code Playgroud)

我看到部署

 kubectl get deployment
NAME             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-minikube   1         1         1            1           27m
Run Code Online (Sandbox Code Playgroud)

我将 hello-minikube 部署公开为服务

kubectl get service
NAME             TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   LoadBalancer   10.102.236.236   <pending>     8080:31825/TCP   15m
kubernetes       ClusterIP      10.96.0.1        <none>        443/TCP          19h

Run Code Online (Sandbox Code Playgroud)

我得到了服务的网址

minikube service hello-minikube --url
http://192.168.99.100:31825
Run Code Online (Sandbox Code Playgroud)

当我尝试卷曲 url 时,出现以下错误

curl http://192.168.99.100:31825
curl: (7) Failed to connect to 192.168.99.100 port 31825: Connection refused

Run Code Online (Sandbox Code Playgroud)

1) 如果 minikube 集群在启动时出现故障,kubectl 如何连接到 minikube 进行部署和服务?2)如果集群正常,那么为什么我的连接被拒绝?

我在看这个代理(https://kubernetes.io/docs/setup/learning-environment/minikube/#starting-a-cluster)里面的 my_proxy 是什么?

这是 minikube ip 和一些端口吗?

我试过这个

重新启动集群时出错:重新启动 kube-proxy:等待 kube-proxy 启动以进行 configmap 更新:等待条件超时

但不明白解决方案中的#3(set proxy) 将如何完成。有人可以帮我获取代理说明吗?

添加在评论中询问的命令输出

kubectl get po -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
etcd-minikube                           1/1     Running   0          4m
kube-addon-manager-minikube             1/1     Running   0          5m
kube-apiserver-minikube                 1/1     Running   0          4m
kube-controller-manager-minikube        1/1     Running   0          6m
kube-dns-86f4d74b45-sdj6p               3/3     Running   0          5m
kube-proxy-7ndvl                        1/1     Running   0          5m
kube-scheduler-minikube                 1/1     Running   0          5m
kubernetes-dashboard-5498ccf677-4x7sr   1/1     Running   0          5m
storage-provisioner                     1/1     Running   0          5m

Run Code Online (Sandbox Code Playgroud)

mar*_*rio 5

我删除了 minikube 并删除了 ~/.minikube 下的所有文件并重新安装了 minikube。现在它工作正常。我之前没有得到输出,但在它解决问题后我已经附加了它。你能告诉我这个命令的输出说明了什么吗?

Minikube Kubernetes 集群已经被删除并重新设置时,很难甚至不可能判断它到底出了什么问题。

基本上,您可以采取一些措施来正确排除故障或调试问题。

添加在评论中询问的命令输出

您发布的输出实际上只是@Eduardo Baitello 要求您执行的任务的一部分。kubectl get po -n kube-system命令只是表明你的列表Podskube-system的命名空间。换句话说,这是构成您的 Kubernetes 集群的系统 pod 列表,正如您想象的那样,每个组件的正常运行至关重要。正如您在输出中看到的STATUS,您的kube-proxypod 是Running

kube-proxy-7ndvl                        1/1     Running   0          5m
Run Code Online (Sandbox Code Playgroud)

在@Eduardo 的问题中还要求您检查其日志。你可以通过发出:

kubectl logs kube-proxy-7ndvl
Run Code Online (Sandbox Code Playgroud)

它可以告诉您在问题发生时这个特定的 pod 出了什么问题。此外,在这种情况下,您可以使用describe命令来查看其他 pod 详细信息(有时查看 pod 事件可能对弄清楚发生了什么非常有帮助):

kubectl describe pod kube-proxy-7ndvl
Run Code Online (Sandbox Code Playgroud)

检查此特定Pod状态和日志的建议很可能是由 Minikube 启动过程中显示的以下错误消息片段激发的:

E0912 17:39:12.486830   17689 start.go:305] Error restarting 
cluster:  restarting kube-proxy: waiting for kube-proxy to be 
up for configmap update: timed out waiting for the condition
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这条消息清楚地表明存在“问题”,kube-proxy因此首先检查它很有意义。

还有一件事你可能没有注意到:

kubectl get service
NAME             TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   LoadBalancer   10.102.236.236   <pending>     8080:31825/TCP   15m
kubernetes       ClusterIP      10.96.0.1        <none>        443/TCP          19h
Run Code Online (Sandbox Code Playgroud)

您的hello-minikube服务还没有完全准备好。在EXTERNAL-IP列中,您可以看到其状态为pending。正如您可以使用describe命令来描述一样,Pods您可以这样做来获取服务的详细信息。简单的:

describe service hello-minikube
Run Code Online (Sandbox Code Playgroud)

在这种情况下可以告诉你很多。

1) 如果 minikube 集群在启动时出现故障,kubectl 如何连接到 minikube 进行部署和服务?2)如果集群正常,那么为什么我的连接被拒绝?

请记住,Kubernetes 集群不是单体结构,它由许多相互依赖的部分组成。kubectl有效并且您可以创建部署这一事实并不意味着整个集群运行良好,并且正如您在错误消息中看到的那样,它表明其组件之一,即kube-proxy,实际上无法正常运行。

回到你问题的开头......

我已按照此处提供的安装说明进行操作 https://kubernetes.io/docs/setup/learning-environment/minikube/#using-minikube-with-an-http-proxy

问题 1:安装 kubectl、virtualbox 和 minikube 后,我运行了命令

minikube start --vm-driver=virtualbox
Run Code Online (Sandbox Code Playgroud)

据我了解,您没有使用 http 代理,因此您没有按照您发布的文档的这个特定片段中的说明进行操作,是吗?

我的印象是你混合了 2 个概念。kube-proxy这是一个Kubernetes cluster组件,在文档片段中提到的kube-system空间中部署为 pod和http 代理服务器

我在看这个代理(https://kubernetes.io/docs/setup/learning-environment/minikube/#starting-a-cluster)里面的 my_proxy 是什么?

如果您不知道您的http 代理地址是什么,很可能您只是不使用它,如果您不使用它从您的计算机连接到 Internet,它在任何情况下都不适用于您的情况.

否则,您需要在启动Minikube 时通过提供额外的标志为您的Minikube进行设置,如下所示:

minikube start --docker-env http_proxy=http://$YOURPROXY:PORT \
                 --docker-env https_proxy=https://$YOURPROXY:PORT
Run Code Online (Sandbox Code Playgroud)

如果您能够启动Minikube并且现在它只能使用以下命令正常工作:

minikube start --vm-driver=virtualbox
Run Code Online (Sandbox Code Playgroud)

您的问题是由其他原因引起的,您无需提供上述标志来告诉Minikube您正在使用的 http 代理服务器是什么

据我了解,目前一切都已启动并正在运行,您可以minikube service hello-minikube --url毫无问题地访问命令返回的 url ,对吗?您还可以运行该命令kubectl get service hello-minikube并检查其输出是否与您之前发布的不同。由于您没有附加任何 yaml 定义文件,因此很难判断您的服务定义是否有问题。另请注意,这Load Balancer是一种服务类型,旨在与云提供商提供的外部负载平衡器一起使用,minikube 使用NodePort它来代替它。