kubernetes 使用WLS2在Docker Desktop上启用入口控制器

iecba09b  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(5)|浏览(202)

目前,我正在使用与WSL 2集成的Docker Desktop。我发现Docker Desktop已自动为我创建了一个群集。这意味着我不必安装和使用MinikubeKind来创建群集。问题是,如果我使用Docker Desktop中“内置”群集,我如何启用入口控制器?我尝试创建一个入口来检查它是否工作,但正如我猜测的那样,但没有成功。
我创建的YAML文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  minReadySeconds: 30
  selector:
    matchLabels:
      app: webapp
  replicas: 1
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: nodejs-helloworld:v1

--- 

apiVersion: v1
kind: Service
metadata:
  name: webapp-service

spec:
  selector: 
    app: webapp
  
  ports:
    - name: http
      port: 3000
      nodePort: 30090 # only for NotPort > 30,000
    
  type: NodePort #ClusterIP inside cluster

---

apiVersion: networking.k8s.io/v1
kind: Ingress 
metadata:
  name: webapp-ingress
spec:
  defaultBackend:
    service:
      name: webapp-service
      port:
        number: 3000
  rules:
  - host: ingress.local
    http:
      paths:
      - path: / 
        pathType: Prefix
        backend:
          service:
            name:  webapp-service
            port: 
              number: 3000

我尝试访问 ingress.local/,但没有成功。(我在主机文件中添加了ingress.local以指向127.0.0.1。webappkubernetes.docker.internal:30090 中运行良好)
你能帮我了解一下根本原因吗?谢谢。

2w2cym1i

2w2cym1i1#

最后我找到了修复的方法。我必须通过命令部署入口Nginx:

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

(按照www.example.com上的说明操作https://kubernetes.github.io/ingress-nginx/deploy/#docker-for-mac。它对Windows版Docker工作正常)
现在我可以成功访问http://ingress.local了。

0dxa2lsx

0dxa2lsx2#

您 必须 在 集群 上 安装 ingress-nginx 控制 器 , 以便 节点 拥有 一 个 开放 的 端口 80/443 。
使用 helm ( v3 - 请 参阅 文档 ) :

helm install --namespace kube-system nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx

中 的 每 一 个
使用 kubectl ( 请 参阅 文档 ) :

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

格式
然后 手动 将 入口 的 主机 名 添加 到 /etc/hosts

127.0.0.1     ingress.local
127.0.0.1     my.other.service.local
# ...

格式
然后 , 如果 您 在 http://ingress.local 上 发出 请求 :

  • dNS 解析 将 路由 到 群集 节点
  • 则 入口 控制 器 将 在 端口 80 上 服务 该 请求 ,
  • 则 入口 会 将 请求 路由 到 配置 的 后端 服务
  • 并且 服务 将 路由 到 可用 的 POD
x7yiwoj4

x7yiwoj43#

最 新 版本 的 Docker Desktop for Windows 已 添加 了 一 个 主机 文件 条目 :127.0.0.1 kubernetes.docker.internal .
如果 你 想 指向 127.0.0.1 , 你 必须 在 入口 定义 中 使用 kubernetes.docker.internal URL 作为 主机 名 。 这 应该 在 kubernetes.github.io/ingress-nginx/deploy 页面 的 文档 中 , 但是 那里 没有 Docker Desktop for Windows 部分 。 你 的 文件 应该 看 起来 像 这样 :

apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    app: webapp
  ports:
  - name: http
    protocol: TCP
    port: 3000
    nodePort: 30090

中 的 每 一 个
您 的 入口 文件 应 如下 所 示 :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: webapp-ingress 
spec:
  rules:
  - host: kubernetes.docker.internal
    http:
      paths:
      - path: /
        backend:
          serviceName: webapp-service 
          servicePort: http

格式
然后 , 您 可以 使用 http://kubernetes.docker.internal/ 连接 到 应用 程序 。
示例 如下 :wsl2-docker-for-desktop 的 最 大 值 。

ccrfmcuu

ccrfmcuu4#

我使用Docker-Desktop版本安装nginx-ingress控制器https://kubernetes.github.io/ingress-nginx/deploy/#docker-desktop

curl 度http://kubernetes.docker.internal/

当然,我还没有安装任何工作负载,但默认的入口控制器工作正常。

xoshrz7s

xoshrz7s5#

使用Kustomize,您只需使用

helmCharts:
  - name: ingress-nginx
    releaseName: ingress-nginx
    repo: https://kubernetes.github.io/ingress-nginx

相关问题