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

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

    本教程假设你正在使用 minikube 运行一个本地 Kubernetes 集群。 参阅了解如何安装 minikube

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

    你的 Kubernetes 服务器版本必须不低于版本 1.19. 要获知版本信息,请输入 kubectl version.

    如果你使用的是较早的 Kubernetes 版本,请切换到该版本的文档。

    如果你还未在本地搭建集群,运行 minikube start 创建集群。

    启用 Ingress 控制器

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

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

      1. kubectl get pods -n ingress-nginx

      说明:

      最多可能需要等待一分钟才能看到这些 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. 使用下面的命令创建一个 Deployment:

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

      输出:

      1. deployment.apps/web created
    2. 将 Deployment 暴露出来:

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

      输出类似于:

      1. service/web exposed
    3. 验证 Service 已经创建,并且可以从节点端口访问:

      1. kubectl get service web
      1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
      2. web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
    4. 使用节点端口信息访问服务:

      1. minikube service web --url

      输出类似于:

      1. http://172.17.0.15:31637

      输出类似于:

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

    创建一个 Ingress

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

    1. 通过运行下面的命令创建 Ingress 对象:

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

      输出类似于:

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

      1. kubectl get ingress

      说明:

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

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

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

      1. curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info

      你应该看到类似输出:

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

      你也可以从浏览器访问 hello-world.info

      • 查看 Minikube 报告的外部 IP 地址:

          将类似以下这一行添加到你计算机上的 文件的末尾(需要管理员访问权限):

          1. 172.17.0.15 hello-world.info

          说明:

          1. 更改 IP 地址以匹配 `minikube ip` 的输出。

          更改完成后,在浏览器中访问 URL hello-world.info,请求将被发送到 Minikube。

      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. 访问 Hello World 应用的第一个版本:

        1. curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info

        输出类似于:

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

        1. curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info/v2

        输出类似于:

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

        说明:

      接下来