Kubernetes之Ingress服务

我们一起学习 Kubernetes 的 Ingress 服务发现吧!

Kubernetes 中为了实现服务实例间的负载均衡和不同服务间的服务发现,创造了 Service 对象,同时又为从集群外部访问集群创建了 Ingress 对象。

Kubernetes之Ingress服务 Kubernetes之Ingress服务

1. 原理介绍

介绍关于 K8S 中 Ingress 的基本知识和要点!

我们都知道传统的 SVC 只支持四层上面的代码,而对于七层上的代码而无能为力。比如:我们使用 K8S 集群对外提供 HTTPS 的服务,为了方便和便捷,我们需要在对外的 Nginx 服务上面配置 SSL 加密,但是将请求发送给后端服务的时候,进行证书卸载的操作,后续都是用 HTTP 的协议进行处理。而面对此问题,K8S 中给出了使用 Ingress (K8S在1.11版本中推出了)来进行处理。

Kubernetes之Ingress服务 - 请求流程 Kubernetes之Ingress服务 - Nginx协程的工作方案
Kubernetes                                                  Workstation
+---------------------------------------------------+     +------------------+
|                                                   |     |                  |
|  +-----------+   apiserver        +------------+  |     |  +------------+  |
|  |           |   proxy            |            |  |     |  |            |  |
|  | apiserver |                    |  ingress   |  |     |  |  ingress   |  |
|  |           |                    | controller |  |     |  | controller |  |
|  |           |                    |            |  |     |  |            |  |
|  |           |                    |            |  |     |  |            |  |
|  |           |  service account/  |            |  |     |  |            |  |
|  |           |  kubeconfig        |            |  |     |  |            |  |
|  |           +<-------------------+            |  |     |  |            |  |
|  |           |                    |            |  |     |  |            |  |
|  +------+----+      kubeconfig    +------+-----+  |     |  +------+-----+  |
|         |<--------------------------------------------------------|        |
|                                                   |     |                  |
+---------------------------------------------------+     +------------------+

2. 服务安装

介绍关于 Ingress 服务的安装方式!

安装 Ingress-Nginx 首先需要在官网下载对应的安装 yaml 文件,如果你也是 Mac 用户的话,可以使用该 下载文件 进行安装。 安装的过程中,根据部署文件其会自行定义一个名为 ingress-nginx 的名称空间,由来保存其对应的 Pod 和内容。而 Deployments 中会自动部署一个名为 nginx-ingress-controller 的服务,用于管理和控制 Ingress 服务。当然,还有对应 Deployment 的 ingress-nginx 的 SVC 也会一同创建的。同时,还有相关的角色、ConfigMap 等等。

# 直接运行即可安装
$ kubectl apply -f deploy.yaml

可以看到其底层的暴露类型就是 NodePort 模式,会在每个 Node 节点上面开放的 80 端口和 443 端口映射的地址。

# 查看对应SVC服务
$ kubectl get svc -n ingress-nginx
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.97.243.161           80:31345/TCP,443:31802/TCP   22s

1. 查看对应POD服务
$ kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-761212d12f-11864   1/1     Running   0          54s

3. 配置 HTTP 代理

配置关于 Ingress 服务的 HTTP 代理访问!

  • Deployment/Service/Ingress
    • 我们这里可以使用 kubectl apply -f ingress-http.yml 来直接部署服务。