【问题标题】:Minikube ingress not respondingMinikube 入口没有响应
【发布时间】:2020-07-02 02:40:47
【问题描述】:

我无法使用 minikube 在我的本地计算机上运行 Minikube Nginx Ingress。它只是超时。 我也关注了this 教程和this one

Minikube 版本:

v1.8.1 (commit cbda04cf6bbe65e987ae52bb393c10099ab62014)

集群信息:

// Client Version: 
{
    Major: "1",
    Minor: "17",
    GitVersion: "v1.17.1",
    GitCommit: "d224476cd0730baca2b6e357d144171ed74192d6",
    GitTreeState: "clean",
    BuildDate: "2020-01-14T21:04:32Z",
    GoVersion: "go1.13.5",
    Compiler: "gc",
    Platform: "windows/amd64"
}
// Server Version: version.Info
{
    Major: "1",
    Minor: "17",
    GitVersion: "v1.17.3",
    GitCommit: "06ad960bfd03b39c8310aaf92d1e7c12ce618213",
    GitTreeState: "clean",
    BuildDate: "2020-02-11T18:07:13Z",
    GoVersion: "go1.13.6",
    Compiler: "gc",
    Platform: "linux/amd64"
}

我的本​​地环境一定有问题,但我不知道如何调试它。到目前为止,这是我当前环境的样子:

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-first
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
    name: http
  selector:
    app: hello-kubernetes-first
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-first
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-first
  template:
    metadata:
      labels:
        app: hello-kubernetes-first
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.5
        ports:
        - containerPort: 8080
        env:
        - name: MESSAGE
          value: Hello from the first deployment!
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: hw1.com
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-first
          servicePort: 80

系统吊舱

~\Desktop\kubernetes> kubectl get pods -n kube-system                                                                                                                                                              NAME                                        READY   STATUS    RESTARTS   AGE
coredns-6955765f44-8zxgw                    1/1     Running   6          12d
coredns-6955765f44-jr9xq                    1/1     Running   7          12d
etcd-m01                                    1/1     Running   1          3h48m
kube-apiserver-m01                          1/1     Running   1          3h48m
kube-controller-manager-m01                 1/1     Running   597        12d
kube-proxy-mnhcl                            1/1     Running   7          12d
kube-scheduler-m01                          1/1     Running   596        12d
nginx-ingress-controller-6fc5bcc8c9-z7m2b   1/1     Running   6          27h
storage-provisioner                         1/1     Running   11         12d

C:\Windows\System32\drivers\etc\hosts

172.17.186.182 hw1.com

minikube IP

~\Desktop\kubernetes> minikube IP
172.17.186.182

【问题讨论】:

    标签: kubernetes minikube nginx-ingress


    【解决方案1】:

    您在 Service 定义中使用了 ClusterIP,从输出的外观来看,您正在 Windows 上运行 minikube。

    您将无法从您的 Windows CMD 访问 ClusterIP,因为它在 VM(虚拟机)中运行。您可以通过运行来确认这一点:

    minikube ssh
    

    然后在虚拟机中:

    curl 172.17.186.182
    

    您可以尝试在 VM 上使用 NodePort 公开您的服务。这将是您的 VM 外部可用的端口,但它不会是 80,因为 Kubernetes 分配了30000-32767 的可配置范围。如果您愿意,可以使用--service-node-port-range portRange 选项在kube-apiserver 中手动更改此设置。

    apiVersion: v1
    kind: Service
    metadata:
      name: hello-kubernetes-first
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 8080
        name: http
      selector:
        app: hello-kubernetes-first
    

    从您的 Windows CMD 获取NodePort(示例):

    kubectl get svc
    NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    hello-kubernetes-first   NodePort    10.102.234.222   <none>        80:31181/TCP   3m51s
    kubernetes               ClusterIP   10.96.0.1        <none>        443/TCP        138d
    

    上面的NodePort是31181

    接下来,您必须在 VM 中使用 eth0 的 IP:

    minikube ssh
    $ ifconfig eth0
    

    然后回到你的 Windows CMD:

    curl <ip-from-eth0-above>:31181
    

    【讨论】:

    • 您好,谢谢您的回答。我认为通过使用入口控制器,我不必将 pod 暴露在外部。我试图将入口控制器用作一种 API 网关
    • Ingress 资源本身不是入口控制器。这只是一个Ingress 资源。实际的入口控制器类似于github.com/kubernetes/ingress-nginx。它为您提供了更大的灵活性,但是您将回到能够从主机访问它到虚拟机的相同问题,您不能使用ClusterIP
    【解决方案2】:

    检查入口插件是否启用:

    minikube addons list
    

    如果没有,请启用它:

    minikube addons enable ingress
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-23
      • 2019-12-06
      • 2019-04-14
      • 2021-04-26
      • 2018-10-16
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多