繁体   English   中英

带有 Docker 桌面的 Windows 上的 Kubernetes Nginx 入口控制器 - 似乎不起作用

[英]Kubernetes Nginx Ingress Controller on Windows with Docker Desktop - doesn't seem to work

我安装了 Docker 桌面 (Windows),并打开了 Kubernetes。

我已经通过运行以下命令安装了 Nginx 入口控制器:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml

以上来自文档的命令

我已经应用了以下 YAML ...

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blah
spec:
  replicas: 1
  selector:
    matchLabels:
      app: blah
  template:
    metadata:
      labels:
        app: blah
    spec:
      containers:
      - name: blah
        image: tutum/hello-world
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
  name: blah
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30010
  selector:
    app: blah

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: blah
spec:
  defaultBackend:
    service:
      name: blah
      port:
        name: http
  rules:
  - host: kubernetes.docker.internal
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: blah
              port:
                name: HTTP

如果我从我的 Windows 机器http://kubernetes.docker.internal/发出 GET 请求 - 我得到这个......

在此处输入图片说明

以上,我希望能击中我的豆荚。

如果我访问一个不存在的 URL(例如“http://kubernetes.docker.internal/nonexistant”),我会得到一个 NGINX 404。

如果我在 HTTPS 版本“https://kubernetes.docker.internal”上执行此操作 - 我也会得到 404。

如果我通过 NodePort 'http://kubernetes.docker.internal:30010' 访问它,那么它会按预期工作,因为它没有使用入口。

几乎就像安装了 Nginx 控制器一样,但是任何请求都只是直接命中 Nginx,而忽略了我创建的任何入口。

我确定我遗漏了一些基本的东西 - 但是关于我做错了什么的任何想法?

更新

继@clarj 的评论之后,我查看了 nginx 控制器日志,看到以下错误:“入口不包含有效的 IngressClass”。 所以我在入口中添加了以下内容......

  annotations:
    kubernetes.io/ingress.class: "nginx"

这已经摆脱了错误,但没有解决问题。

这是我现在的日志...

-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:       v1.0.4
  Build:         9b78b6c197b48116243922170875af4aa752ee59
  Repository:    https://github.com/kubernetes/ingress-nginx
  nginx version: nginx/1.19.9

-------------------------------------------------------------------------------

W1014 18:13:38.886167       7 client_config.go:615] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
I1014 18:13:38.886636       7 main.go:221] "Creating API client" host="https://10.96.0.1:443"
I1014 18:13:38.890654       7 main.go:265] "Running in Kubernetes cluster" major="1" minor="21" git="v1.21.4" state="clean" commit="3cce4a82b44f032d0cd1a1790e6d2f5a55d20aae" platform="linux/amd64"
I1014 18:13:38.979187       7 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
I1014 18:13:38.987243       7 ssl.go:531] "loading tls certificate" path="/usr/local/certificates/cert" key="/usr/local/certificates/key"
I1014 18:13:38.992390       7 nginx.go:253] "Starting NGINX Ingress controller"
I1014 18:13:38.995200       7 event.go:282] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"ingress-nginx", Name:"ingress-nginx-controller", UID:"4865a09a-18fe-4760-a466-742b63ab480f", APIVersion:"v1", ResourceVersion:"14917", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap ingress-nginx/ingress-nginx-controller
I1014 18:13:40.095580       7 store.go:371] "Found valid IngressClass" ingress="default/blah" ingressclass="nginx"
I1014 18:13:40.095725       7 event.go:282] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"blah", UID:"389b024c-9148-4ed0-83b6-a8be5e241655", APIVersion:"networking.k8s.io/v1", ResourceVersion:"25734", FieldPath:""}): type: 'Normal' reason: 'Sync' Scheduled for sync
I1014 18:13:40.193521       7 nginx.go:295] "Starting NGINX process"
I1014 18:13:40.193677       7 leaderelection.go:243] attempting to acquire leader lease ingress-nginx/ingress-controller-leader...
I1014 18:13:40.193757       7 nginx.go:315] "Starting validation webhook" address=":8443" certPath="/usr/local/certificates/cert" keyPath="/usr/local/certificates/key"
I1014 18:13:40.193876       7 controller.go:152] "Configuration changes detected, backend reload required"
I1014 18:13:40.195273       7 status.go:84] "New leader elected" identity="ingress-nginx-controller-5c8d66c76d-4gfd4"
I1014 18:13:40.213501       7 controller.go:169] "Backend successfully reloaded"
I1014 18:13:40.213577       7 controller.go:180] "Initial sync, sleeping for 1 second"
I1014 18:13:40.213614       7 event.go:282] Event(v1.ObjectReference{Kind:"Pod", Namespace:"ingress-nginx", Name:"ingress-nginx-controller-5c8d66c76d-fb79x", UID:"69db0f7e-0137-48ee-b4aa-fc28d5208423", APIVersion:"v1", ResourceVersion:"25887", FieldPath:""}): type: 'Normal' reason: 'RELOAD' NGINX reload triggered due to a change in configuration
I1014 18:14:23.192016       7 leaderelection.go:253] successfully acquired lease ingress-nginx/ingress-controller-leader
I1014 18:14:23.192035       7 status.go:84] "New leader elected" identity="ingress-nginx-controller-5c8d66c76d-fb79x"

更新 2

实际上,我上面“更新”中的修复确实有效。 我只需要在我的 GET 请求中使用 HTTP。

在@clarj 提示检查 Nginx 控制器 pod 日志后,我解决了这个问题。

原来我在我的入口中缺少以下注释......

  annotations:
    kubernetes.io/ingress.class: "nginx"

(请参阅我的初始帖子中的“更新”)

在那次修复之后 - 具有 HTTPS 的 GET 请求然后工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM