在 Minikube 环境中使用 NGINX Ingress 控制器配置 Ingress

    本节为你展示如何配置一个简单的 Ingress,根据 HTTP URI 将服务请求路由到 服务 或 web2

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    Your Kubernetes server must be at or later than version 1.19. To check the version, enter kubectl version. 如果你使用的是较早的 Kubernetes 版本,请切换到该版本的文档。

    使用 Katacoda

    Launch Terminal

    本地

    如果已经在本地, 请运行 minikube start 创建一个集群。

    启用 Ingress 控制器

    1. 为了启用 NGINIX Ingress 控制器,可以运行下面的命令:

    2. 检查验证 NGINX Ingress 控制器处于运行状态:

      1. kubectl get pods -n ingress-nginx

      Note: 最多可能需要等待一分钟才能看到这些 Pod 运行正常。

      输出类似于:

      1. NAME READY STATUS RESTARTS AGE
      2. ingress-nginx-admission-create-g9g49 0/1 Completed 0 11m
      3. ingress-nginx-admission-patch-rqp78 0/1 Completed 1 11m
      4. ingress-nginx-controller-59b45fb494-26npt 1/1 Running 0 11m
      1. kubectl get pods -n kube-system

      Note: 最多可能需要等待一分钟才能看到这些 Pod 运行正常。

      输出类似于:

      1. NAME READY STATUS RESTARTS AGE
      2. default-http-backend-59868b7dd6-xb8tq 1/1 Running 0 1m
      3. kube-addon-manager-minikube 1/1 Running 0 3m
      4. kube-dns-6dcb57bcc8-n4xd4 3/3 Running 0 2m
      5. kubernetes-dashboard-5498ccf677-b8p5h 1/1 Running 0 2m
      6. nginx-ingress-controller-5984b97644-rnkrg 1/1 Running 0 1m
      7. storage-provisioner 1/1 Running 0 2m

      请确保可以在输出中看到一个名称以 nginx-ingress-controller- 为前缀的 Pod。

    1. 使用下面的命令创建一个 Deployment:

      1. kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0

      输出:

      1. deployment.apps/web created
      1. kubectl expose deployment web --type=NodePort --port=8080

      输出:

      1. service/web exposed
    2. 使用节点端口信息访问服务:

      输出类似于:

      1. http://172.17.0.15:31637

      Note: 如果使用的是 Katacoda 环境,在终端面板顶端,请点击加号标志。 然后点击 Select port to view on Host 1。 输入节点和端口号(这里是31637),之后点击 Display Port

      输出类似于:

      1. Hello, world!
      2. Hostname: web-55b8c6998d-8k564

      你现在应该可以通过 Minikube 的 IP 地址和节点端口来访问示例应用了。 下一步是让自己能够通过 Ingress 资源来访问应用。

    创建一个 Ingress

    下面是一个定义 Ingress 的配置文件,负责通过 hello-world.info 将请求 转发到你的服务。

    1. 根据下面的 YAML 创建文件 example-ingress.yaml

      service/networking/example-ingress.yaml

      1. apiVersion: networking.k8s.io/v1
      2. kind: Ingress
      3. metadata:
      4. name: example-ingress
      5. annotations:
      6. nginx.ingress.kubernetes.io/rewrite-target: /$1
      7. spec:
      8. rules:
      9. - host: hello-world.info
      10. http:
      11. paths:
      12. - path: /
      13. pathType: Prefix
      14. backend:
      15. service:
      16. name: web
      17. port:
      18. number: 8080
    2. 通过运行下面的命令创建 Ingress 对象:

      1. kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml

      输出:

      1. ingress.networking.k8s.io/example-ingress created
    3. 验证 IP 地址已被设置:

      1. kubectl get ingress

      Note: 此操作可能需要几分钟时间。

      接下来你将会在ADDRESS列中看到IPv4地址,例如:

      1. NAME CLASS HOSTS ADDRESS PORTS AGE
      2. example-ingress <none> hello-world.info 172.17.0.15 80 38s
    4. 验证 Ingress 控制器能够转发请求流量:

      1. curl hello-world.info

      你应该看到类似输出:

      1. Hello, world!
      2. Version: 1.0.0
      3. Hostname: web-55b8c6998d-8k564

      Note: 如果你在使用本地 Minikube 环境,你可以从浏览器中访问 hello-world.info。

    1. 使用下面的命令创建第二个 Deployment:

      输出:

      1. deployment.apps/web2 created
    2. 将第二个 Deployment 暴露出来:

      1. kubectl expose deployment web2 --port=8080 --type=NodePort

      输出:

      1. service/web2 exposed

    编辑现有的 Ingress

    1. 编辑现有的 example-ingress.yaml,在文件最后添加以下行:

      1. - path: /v2
      2. pathType: Prefix
      3. backend:
      4. service:
      5. name: web2
      6. port:
      7. number: 8080
    2. 应用变更:

      1. kubectl apply -f example-ingress.yaml

      输出:

      1. ingress.networking/example-ingress configured
    1. 访问 HelloWorld 应用的第一个版本:

      1. curl hello-world.info

      输出类似于:

      1. Hello, world!
      2. Version: 1.0.0
      3. Hostname: web-55b8c6998d-8k564
    2. 访问 HelloWorld 应用的第二个版本:

      1. curl hello-world.info/v2

      输出类似于:

      1. Hello, world!
      2. Version: 2.0.0
      3. Hostname: web2-75cd47646f-t8cjk

    What’s next

    最后修改 April 24, 2022 at 3:30 AM PST: