website/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md

9.6 KiB
Raw Blame History

title content_type weight
在 Minikube 环境中使用 NGINX Ingress 控制器配置 Ingress task 100

Ingress是一种 API 对象,其中定义了一些规则使得集群中的 服务可以从集群外访问。 Ingress 控制器 负责满足 Ingress 中所设置的规则。

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

{{% heading "prerequisites" %}}

{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}

创建一个 Minikube 集群

  1. 点击 Launch Terminal

    {{< kat-button >}}

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

    minikube start
    

启用 Ingress 控制器

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

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

    kubectl get pods -n kube-system
    

    {{< note >}} 这一操作可能需要近一分钟时间。 {{< /note >}}

    输出:

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

部署一个 Hello World 应用

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

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

    输出:

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

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

    输出:

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

    kubectl get service web
    

    输出:

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

    minikube service web --url
    

    输出:

    http://172.17.0.15:31637
    

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

    输出:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564
    

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

创建一个 Ingress 资源

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

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

    {{< codenew file="service/networking/example-ingress.yaml" >}}

  1. 通过运行下面的命令创建 Ingress 资源:

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

    输出:

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

    kubectl get ingress
    

    {{< note >}} 此操作可能需要几分钟时间。 {{< /note >}}

    NAME              CLASS    HOSTS              ADDRESS        PORTS   AGE
    example-ingress   <none>   hello-world.info   172.17.0.15    80      38s
    
  1. /etc/hosts 文件的末尾添加以下内容:

    {{< note >}} 如果你在本地运行 Minikube 环境,需要使用 minikube ip 获得外部 IP 地址。 Ingress 列表中显示的 IP 地址会是内部 IP 地址。 {{< /note >}}

    172.17.0.15 hello-world.info
    

    此设置使得来自 hello-world.info 的请求被发送到 Minikube。

  1. 验证 Ingress 控制器能够转发请求流量:

    curl hello-world.info
    

    输出:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564
    

    {{< note >}} 如果你在使用本地 Minikube 环境,你可以从浏览器中访问 hello-world.info。 {{< /note >}}

创建第二个 Deployment

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

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

    输出:

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

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

    输出:

    service/web2 exposed
    

编辑 Ingress

  1. 编辑现有的 example-ingress.yaml,添加以下行:

    - path: /v2
      pathType: Prefix
      backend:
        service:
          name: web2
          port:
            number: 8080
    
  1. 应用所作变更:

    kubectl apply -f example-ingress.yaml
    

    输出:

    ingress.networking/example-ingress configured
    

测试你的 Ingress

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

    curl hello-world.info
    

    输出:

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

    curl hello-world.info/v2
    

    输出:

    Hello, world!
    Version: 2.0.0
    Hostname: web2-75cd47646f-t8cjk
    

    {{< note >}} 如果你在本地运行 Minikube 环境,你可以使用浏览器来访问 hello-world.info 和 hello-world.info/v2。 {{< /note >}}

{{% heading "whatsnext" %}}