From ac9daa6d8a06e94798a45ee0be3f29c49ee2c816 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Fri, 31 Jul 2020 16:29:14 +0800 Subject: [PATCH] [zh] Localize ingress-minikube --- .../ingress-minikube.md | 421 ++++++++++++++++++ 1 file changed, 421 insertions(+) create mode 100644 content/zh/docs/tasks/access-application-cluster/ingress-minikube.md diff --git a/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md b/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md new file mode 100644 index 0000000000..dab03002d3 --- /dev/null +++ b/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md @@ -0,0 +1,421 @@ +--- +title: 在 Minikube 环境中使用 NGINX Ingress 控制器配置 Ingress +content_type: task +weight: 100 +--- + + + + + +[Ingress](/zh/docs/concepts/services-networking/ingress/)是一种 API 对象,其中定义了一些规则使得集群中的 +服务可以从集群外访问。 +[Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers/) +负责满足 Ingress 中所设置的规则。 + +本节为你展示如何配置一个简单的 Ingress,根据 HTTP URI 将服务请求路由到 +服务 `web` 或 `web2`。 + +## {{% heading "prerequisites" %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + + + + +## 创建一个 Minikube 集群 + +1. 点击 **Launch Terminal** + + {{< kat-button >}} + + +2. (可选操作)如果你在本地安装了 Minikube,运行下面的命令: + + ```shell + minikube start + ``` + + +## 启用 Ingress 控制器 + +1. 为了启用 NGINIX Ingress 控制器,可以运行下面的命令: + + + ```shell + minikube addons enable ingress + ``` + + +2. 检查验证 NGINX Ingress 控制器处于运行状态: + + ```shell + kubectl get pods -n kube-system + ``` + + + {{< note >}}这一操作可供需要近一分钟时间。{{< /note >}} + + 输出: + + ```shell + 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: + + ```shell + kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0 + ``` + + + 输出: + + ``` + deployment.apps/web created + ``` + + +2. 将 Deployment 暴露出来: + + ```shell + kubectl expose deployment web --type=NodePort --port=8080 + ``` + + + 输出: + + ``` + service/web exposed + ``` + + +3. 验证 Service 已经创建,并且可能从节点端口访问: + + ```shell + kubectl get service web + ``` + + + 输出: + + ```shell + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + web NodePort 10.104.133.249 8080:31637/TCP 12m + ``` + + +4. 使用节点端口信息访问服务: + + ```shell + minikube service web --url + ``` + + + 输出: + + ```shell + http://172.17.0.15:31637 + ``` + + + {{< note >}} + 如果使用的是 Katacoda 环境,在终端面板顶端,请点击加号标志。 + 然后点击 **Select port to view on Host 1**。 + 输入节点和端口号(这里是`31637`),之后点击 **Display Port**。 + {{< /note >}} + + + 输出: + + ```shell + Hello, world! + Version: 1.0.0 + Hostname: web-55b8c6998d-8k564 + ``` + + + 你现在应该可以通过 Minikube 的 IP 地址和节点端口来访问示例应用了。 + 下一步是让自己能够通过 Ingress 资源来访问应用。 + + +## 创建一个 Ingress 资源 + +下面是一个 Ingress 资源的配置文件,负责通过 `hello-world.info` 将服务请求 +转发到你的服务。 + +1. 根据下面的 YAML 创建文件 `example-ingress.yaml`: + + ```yaml + apiVersion: networking.k8s.io/v1beta1 + kind: Ingress + metadata: + name: example-ingress + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /$1 + spec: + rules: + - host: hello-world.info + http: + paths: + - path: / + backend: + serviceName: web + servicePort: 8080 + ``` + + +2. 通过运行下面的命令创建 Ingress 资源: + + ```shell + kubectl apply -f example-ingress.yaml + ``` + + + 输出: + + ```shell + ingress.networking.k8s.io/example-ingress created + ``` + +3. 验证 IP 地址已被设置: + + ```shell + kubectl get ingress + ``` + + + {{< note >}}此操作可能需要几分钟时间。{{< /note >}} + + ```shell + NAME HOSTS ADDRESS PORTS AGE + example-ingress hello-world.info 172.17.0.15 80 38s + ``` + + +4. 在 `/etc/hosts` 文件的末尾添加以下内容: + + + {{< note >}} + 如果你在本地运行 Minikube 环境,需要使用 `minikube ip` 获得外部 IP 地址。 + Ingress 列表中显示的 IP 地址会是内部 IP 地址。 + {{< /note >}} + ``` + 172.17.0.15 hello-world.info + ``` + + + 此设置使得来自 `hello-world.info` 的请求被发送到 Minikube。 + + +5. 验证 Ingress 控制器能够转发请求流量: + + ```shell + curl hello-world.info + ``` + + + 输出: + + ```shell + Hello, world! + Version: 1.0.0 + Hostname: web-55b8c6998d-8k564 + ``` + + + {{< note >}} + 如果你在使用本地 Minikube 环境,你可以从浏览器中访问 hellow-world.info。 + {{< /note >}} + + +## 创建第二个 Deployment + +1. 使用下面的命令创建 v2 的 Deployment: + + ```shell + kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0 + ``` + + 输出: + + ```shell + deployment.apps/web2 created + ``` + + +2. 将 Deployment 暴露出来: + + ```shell + kubectl expose deployment web2 --port=8080 --type=NodePort + ``` + + + 输出: + + ```shell + service/web2 exposed + ``` + + +## 编辑 Ingress + +1. 编辑现有的 `example-ingress.yaml`,添加以下行: + + + ```yaml + - path: /v2 + backend: + serviceName: web2 + servicePort: 8080 + ``` + + +2. 应用所作变更: + + ```shell + kubectl apply -f example-ingress.yaml + ``` + + + 输出: + + ```shell + ingress.networking/example-ingress configured + ``` + + +## 测试你的 Ingress + +1. 访问 HelloWorld 应用的第一个版本: + + ```shell + curl hello-world.info + ``` + + + 输出: + + ``` + Hello, world! + Version: 1.0.0 + Hostname: web-55b8c6998d-8k564 + ``` + + +2. 访问 HelloWorld 应用的第二个版本: + + ```shell + curl hello-world.info/v2 + ``` + + + 输出: + + ``` + Hello, world! + Version: 2.0.0 + Hostname: web2-75cd47646f-t8cjk + ``` + + + {{< note >}} + 如果你在本地运行 Minikube 环境,你可以使用浏览器来访问 + hellow-world.info 和 hello-world.info/v2。 + {{< /note >}} + +## {{% heading "whatsnext" %}} + + + +* 进一步了解 [Ingress](/zh/docs/concepts/services-networking/ingress/)。 +* 进一步了解 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers/) +* 进一步了解[服务](/zh/docs/concepts/services-networking/service/) +