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

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

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 kubectl version.

    创建一个 Minikube 集群

    1. 点击 Launch Terminal

    2. (可选操作)如果你在本地安装了 Minikube,运行下面的命令:

    启用 Ingress 控制器

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

      1. minikube addons enable ingress
    2. 检查验证 NGINX Ingress 控制器处于运行状态:

      1. kubectl get pods -n kube-system

      输出:

      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
    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. web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
    4. 使用节点端口信息访问服务:

      输出:

      1. http://172.17.0.15:31637

      输出:

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

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

    创建一个 Ingress 资源

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

    1. 根据下面的 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
      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

      输出:

    创建第二个 Deployment

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

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

      输出:

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

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

      输出:

      1. service/web2 exposed
    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

    测试你的 Ingress

    1. 访问 HelloWorld 应用的第一个版本:

      1. curl hello-world.info

      输出:

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

      输出:

      1. Hello, world!
      2. Version: 2.0.0

    接下来