pull/450/head
Jimmy Song 2021-07-08 19:08:34 +08:00
parent 3989521766
commit d38ff91d9b
No known key found for this signature in database
GPG Key ID: CBA666E6EF8B2C3A
4 changed files with 131 additions and 134 deletions

View File

@ -94,6 +94,6 @@ Kubernetes Handbook 开源于 2017 年 3 月并在其后不断完善,是第一
</a> </a>
</p> </p>
云原生社区是一个中立的云原生终端用户社区,始与作者于 2016 年成立的 Kubernetes & CloudNative 实战群,覆盖了上千名早期云原生拥护者。在此基础上于 2020 年 5 月,由 CNCF 大使、开源领域意见领袖共同发起将原社群升级为云原生社区,旨在推广云原生技术,构建开发者生态 云原生社区是一个中立的云原生终端用户社区,始与作者于 2016 年成立的 Kubernetes & CloudNative 实战群,覆盖了上千名早期云原生拥护者。在此基础上于 2020 年 5 月,由 CNCF 大使、开源领域意见领袖共同发起将原社群升级为云原生社区,目标成为中国最具影响力的云原生开源社区
官方网站 <https://cloudnative.to>,关注云原生社区微信公众号,[申请加入社区](https://mp.weixin.qq.com/s/vWlSdzz2MNdXRr0sd2-LFg)。 官方网站 <https://cloudnative.to>,关注云原生社区微信公众号,[申请加入社区](https://mp.weixin.qq.com/s/vWlSdzz2MNdXRr0sd2-LFg)。

View File

@ -33,19 +33,20 @@ Ingress是授权入站连接到达集群服务的规则集合。
[Services] [Services]
``` ```
你可以给Ingress配置提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过POST Ingress资源到API server的方式来请求ingress。 [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers)负责实现Ingress通常使用负载平衡器它还可以配置边界路由和其他前端这有助于以HA方式处理流量。 你可以给 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过 POST Ingress 资源到 API server 的方式来请求 ingress。 [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers) 负责实现 Ingress通常使用负载均衡器它还可以配置边界路由和其他前端这有助于以高可用的方式处理流量。
## 先决条件 ## 先决条件
在使用Ingress resource之前有必要先了解下面几件事情。Ingress是beta版本的resource在kubernetes1.1之前还没有。你需要一个`Ingress Controller`来实现`Ingress`,单纯的创建一个`Ingress`没有任何意义 在使用 Ingress 资源之前,有必要先了解下面几件事情
GCE/GKE会在master节点上部署一个ingress controller。你可以在一个pod中部署任意个自定义的ingress controller。你必须正确地annotate每个ingress比如 [运行多个ingress controller](https://git.k8s.io/ingress#running-multiple-ingress-controllers) 和 关闭glbc。 - Ingress 资源对象在 Kubernetes 1.1 之前还没有。
- 你需要一个 `Ingress Controller` 来实现 `Ingress`,单纯的创建一个 `Ingress` 没有任何意义。
- GCE/GKE 会在 master 节点上部署一个 ingress controller。你可以在一个 pod 中部署任意个自定义的 ingress controller。你必须正确地注解每个 ingress比如运行多个 ingress controller 和关闭 glbc。
- 在非 GCE/GKE 的环境中,你需要在 pod 中 部署一个 controller例如 [Nginx Ingress Controller](https://github.com/kubernetes/ingress-nginx/blob/master/README.md)。
确定你已经阅读了Ingress controller的 beta版本限制。在非GCE/GKE的环境中你需要在pod中[部署一个controller](https://git.k8s.io/ingress-nginx/README.md)。 ## Ingress 资源
## Ingress Resource 最简化的 Ingress 配置如下。
最简化的Ingress配置
```yaml ```yaml
1: apiVersion: extensions/v1beta1 1: apiVersion: extensions/v1beta1
@ -62,11 +63,11 @@ GCE/GKE会在master节点上部署一个ingress controller。你可以在一个p
12: servicePort: 80 12: servicePort: 80
``` ```
*如果你没有配置Ingress controller就将其POST到API server不会有任何用处* 如果你没有配置 Ingress controller 就将其 POST 到 API server 不会有任何用处。
**配置说明** **配置说明**
**1-4行**跟Kubernetes的其他配置一样ingress的配置也需要`apiVersion``kind`和`metadata`字段。配置文件的详细说明请查看[部署应用](https://kubernetes.io/docs/user-guide/deploying-applications), [配置容器](https://kubernetes.io/docs/user-guide/configuring-containers)和使用resources **1-4 **:跟 Kubernetes 的其他配置一样ingress 的配置也需要 `apiVersion``kind` `metadata` 字段。配置文件的详细说明请查看 [部署应用](https://kubernetes.io/docs/user-guide/deploying-applications)[配置容器](https://kubernetes.io/docs/user-guide/configuring-containers) 和使用资源
**5-7 行 **: Ingress spec 中包含配置一个 loadbalancer 或 proxy server 的所有信息。最重要的是,它包含了一个匹配所有入站请求的规则列表。目前 ingress 只支持 http 规则。 **5-7 行 **: Ingress spec 中包含配置一个 loadbalancer 或 proxy server 的所有信息。最重要的是,它包含了一个匹配所有入站请求的规则列表。目前 ingress 只支持 http 规则。
@ -74,21 +75,22 @@ GCE/GKE会在master节点上部署一个ingress controller。你可以在一个p
**10-12 行 **:正如 [services doc](https://kubernetes.io/docs/user-guide/services) 中描述的那样backend 是一个 `service:port` 的组合。Ingress 的流量被转发到它所匹配的 backend。 **10-12 行 **:正如 [services doc](https://kubernetes.io/docs/user-guide/services) 中描述的那样backend 是一个 `service:port` 的组合。Ingress 的流量被转发到它所匹配的 backend。
**全局参数**为了简单起见Ingress示例中没有全局参数请参阅资源完整定义的[api参考](https://releases.k8s.io/master/staging/src/k8s.io/api/extensions/v1beta1/types.go)。 在所有请求都不能跟spec中的path匹配的情况下请求被发送到Ingress controller的默认后端可以指定全局缺省backend。 **全局参数**为了简单起见Ingress 示例中没有全局参数,请参阅资源完整定义的 [API 参考](https://releases.k8s.io/master/staging/src/k8s.io/api/extensions/v1beta1/types.go)。 在所有请求都不能跟 spec 中的 path 匹配的情况下,请求被发送到 Ingress controller 的默认后端,可以指定全局缺省 backend。
## Ingress controllers ## Ingress controller
为了使 Ingress 正常工作,集群中必须运行 Ingress controller。 这与其他类型的控制器不同,其他类型的控制器通常作为 `kube-controller-manager` 二进制文件的一部分运行,在集群启动时自动启动。 你需要选择最适合自己集群的 Ingress controller 或者自己实现一个。 为了使 Ingress 正常工作,集群中必须运行 Ingress controller。 这与其他类型的控制器不同,其他类型的控制器通常作为 `kube-controller-manager` 二进制文件的一部分运行,在集群启动时自动启动。 你需要选择最适合自己集群的 Ingress controller 或者自己实现一个。
- kubernetes当前支持并维护[GCE](https://git.k8s.io/ingress-gce/README.md)和[nginx](https://git.k8s.io/ingress-nginx/README.md)两种controller. - Kubernetes 当前支持并维护 [GCE](https://github.com/kubernetes/ingress-gce/blob/master/README.md) 和 [nginx](https://github.com/kubernetes/ingress-nginx/blob/master/README.md) 两种 controller
- F5公司[支持并维护](https://support.f5.com/csp/article/K86859508) [F5 BIG-IP Controller for Kubernetes](http://clouddocs.f5.com/products/connectors/k8s-bigip-ctlr/latest). - F5公司[支持并维护](https://support.f5.com/csp/article/K86859508) [F5 BIG-IP Controller for Kubernetes](http://clouddocs.f5.com/products/connectors/k8s-bigip-ctlr/latest)
- [Kong](https://konghq.com/) 同时支持并维护[社区版](https://discuss.konghq.com/c/kubernetes)与[企业版](https://konghq.com/api-customer-success/)的 [Kong Ingress Controller for Kubernetes](https://konghq.com/blog/kubernetes-ingress-controller-for-kong/). - [Kong](https://konghq.com/) 同时支持并维护 [社区版](https://discuss.konghq.com/c/kubernetes) [企业版](https://konghq.com/api-customer-success/) 的 [Kong Ingress Controller for Kubernetes](https://konghq.com/blog/kubernetes-ingress-controller-for-kong/)
- [Traefik](https://github.com/containous/traefik) 是功能齐全的 ingress controller[Lets Encrypt](https://letsencrypt.org/), secrets, http2, websocket…, Containous 也对其提供商业支持。 - [Traefik](https://github.com/containous/traefik) 是功能齐全的 ingress controller[Lets Encrypt](https://letsencrypt.org/), secrets, http2, websocket…, Containous 也对其提供商业支持。
- [Istio](https://istio.io) 使用 CRD Gateway 来 [控制 Ingress 流量](https://istio.io/docs/tasks/traffic-management/ingress/)。 - [Istio](https://istio.io) 使用 CRD Gateway 来 [控制 Ingress 流量](https://istio.io/docs/tasks/traffic-management/ingress/)。
## 在你开始前 ## 在你开始前
以下文档描述了Ingress资源中公开的一组跨平台功能。 理想情况下所有的Ingress controller都应该符合这个规范但是我们还没有实现。 GCE和nginx控制器的文档分别在[这里](https://git.k8s.io/ingress-gce/README.md)和[这里](https://git.k8s.io/ingress-nginx/README.md)。如果您使用F5 BIG-IP controller, 请参看[这里](http://clouddocs.f5.com/containers/latest/kubernetes/kctlr-k8s-ingress-ctlr.html). 以下文档描述了 Ingress 资源中公开的一组跨平台功能。 理想情况下,所有的 Ingress controller 都应该符合这个规范,但是我们还没有实现。 GCE 和 Nginx 控制器的文档分别在 [这里](https://github.com/kubernetes/ingress-gce/blob/master/README.md) 和 [这里](https://github.com/kubernetes/ingress-nginx/blob/master/README.md)。如果您使用 F5 BIG-IP controller请参看 [这里](http://clouddocs.f5.com/containers/latest/kubernetes/kctlr-k8s-ingress-ctlr.html)。
**确保您查看控制器特定的文档,以便您了解每个文档的注意事项。** **确保您查看控制器特定的文档,以便您了解每个文档的注意事项。**
## Ingress 类型 ## Ingress 类型
@ -309,6 +311,7 @@ test - 178.91.123.132
## 参考 ## 参考
- [Kubernetes Ingress Resource](https://kubernetes.io/docs/concepts/services-networking/ingress/) - [Kubernetes Ingress Resource - kubernetes.io](https://kubernetes.io/docs/concepts/services-networking/ingress/)
- [使用NGINX Plus负载均衡Kubernetes服务](http://dockone.io/article/957) - [使用 NGINX Plus 负载均衡 Kubernetes 服务 - dockone.io](http://dockone.io/article/957)
- [使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡](http://www.cnblogs.com/276815076/p/6407101.html) - [使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡 - cnblogs.com](http://www.cnblogs.com/276815076/p/6407101.html)

View File

@ -1,6 +1,6 @@
# Traefik Ingress Controller # Traefik Ingress Controller
我们在前面部署了 [Traefik](https://traefik.io) 作为Ingress Controller如果集群外部直接访问Kubenretes内部服务的话可以直接创建Ingress如下所示 我们在前面部署了 [Traefik](https://traefik.io) 作为 Ingress Controller如果集群外部直接访问 Kubenetes 内部服务的话,可以直接创建 Ingress 如下所示:
```yaml ```yaml
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
@ -21,7 +21,7 @@ spec:
## Traefik Ingress Controller ## Traefik Ingress Controller
当我们处于迁移应用到kuberentes上的阶段时可能有部分服务实例不在kubernetes上服务的路由使用nginx配置这时处于nginx和ingress共存的状态。参考下面的配置: 当我们处于迁移应用到 Kubernetes 上的阶段时,可能有部分服务实例不在 Kubernetes上服务的路由使用 Nginx 配置,这时处于 nginx 和 ingress 共存的状态。参考下面的配置:
```yaml ```yaml
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
@ -48,7 +48,7 @@ spec:
- `traefik.frontend.rule.type: PathPrefixStrip`:表示将截掉 URL 中的 `path` - `traefik.frontend.rule.type: PathPrefixStrip`:表示将截掉 URL 中的 `path`
- `kubernetes.io/ingress.class`:表示使用的 ingress 类型 - `kubernetes.io/ingress.class`:表示使用的 ingress 类型
nginx中增加配置: Nginx 中增加配置:
```ini ```ini
upstream docGenerate { upstream docGenerate {

View File

@ -1,7 +1,5 @@
# 边缘节点配置 # 边缘节点配置
## 前言
为了配置 kubernetes 中的 traefik ingress 的高可用,对于 kubernetes 集群以外只暴露一个访问入口,需要使用 keepalived 排除单点问题。本文参考了 [kube-keepalived-vip](https://github.com/kubernetes/contrib/tree/master/keepalived-vip),但并没有使用容器方式安装,而是直接在 node 节点上安装。 为了配置 kubernetes 中的 traefik ingress 的高可用,对于 kubernetes 集群以外只暴露一个访问入口,需要使用 keepalived 排除单点问题。本文参考了 [kube-keepalived-vip](https://github.com/kubernetes/contrib/tree/master/keepalived-vip),但并没有使用容器方式安装,而是直接在 node 节点上安装。
## 定义 ## 定义
@ -25,19 +23,17 @@
## 准备 ## 准备
复用kubernetes测试集群的三台主机。 复用 Kubernetes 测试集群的三台主机,其 IP 地址如下:
172.20.0.113 - 172.20.0.113
- 172.20.0.114
172.20.0.114 - 172.20.0.115
172.20.0.115
## 安装 ## 安装
使用 keepalived 管理 VIPVIP 是使用 IPVS 创建的IPVS 已经成为 linux 内核的模块,不需要安装 使用 keepalived 管理 VIPVIP 是使用 IPVS 创建的IPVS 已经成为 linux 内核的模块,不需要安装
LVS的工作原理请参考http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html LVS 的工作原理请参考:[http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html](https://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html)
不使用镜像方式安装了直接手动安装指定三个节点为边缘节点Edge node 不使用镜像方式安装了直接手动安装指定三个节点为边缘节点Edge node
@ -59,9 +55,7 @@ yum install keepalived ipvsadm
## 配置 keepalived ## 配置 keepalived
参考[基于keepalived 实现VIP转移lvsnginx的高可用](http://limian.blog.51cto.com/7542175/1301776)配置keepalived。 参考[基于 keepalived 实现 VIP 转移lvsnginx 的高可用](http://limian.blog.51cto.com/7542175/1301776)keepalived 的配置参考其[官方配置文档](http://keepalived.org/pdf/UserGuide.pdf)。
keepalived的官方配置文档见http://keepalived.org/pdf/UserGuide.pdf
配置文件 `/etc/keepalived/keepalived.conf` 文件内容如下: 配置文件 `/etc/keepalived/keepalived.conf` 文件内容如下:
@ -239,7 +233,7 @@ traefik-ingress-lb 3 3 3 3 3 edge
## 参考 ## 参考
- [kube-keepalived-vip](https://github.com/kubernetes/contrib/tree/master/keepalived-vip) - [kube-keepalived-vip - github.com](https://github.com/kubernetes/contrib/tree/master/keepalived-vip)
- http://www.keepalived.org/ - [keepalived 官方网站 - keepalived.org](http://www.keepalived.org/)
- [LVS简介及使用](http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html) - [LVS 简介及使用 - cnblogs.com](http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html)
- [基于keepalived 实现VIP转移lvsnginx的高可用](http://limian.blog.51cto.com/7542175/1301776) - [基于 keepalived 实现VIP转移lvsnginx 的高可用 - blog.51cto.com](https://blog.51cto.com/limian/1301776)