update
parent
3989521766
commit
d38ff91d9b
|
@ -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)。
|
||||||
|
|
|
@ -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([Let’s Encrypt](https://letsencrypt.org/), secrets, http2, websocket…), Containous 也对其提供商业支持。
|
- [Traefik](https://github.com/containous/traefik) 是功能齐全的 ingress controller([Let’s 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)
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 管理 VIP,VIP 是使用 IPVS 创建的,IPVS 已经成为 linux 内核的模块,不需要安装
|
使用 keepalived 管理 VIP,VIP 是使用 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转移,lvs,nginx的高可用](http://limian.blog.51cto.com/7542175/1301776),配置keepalived。
|
参考[基于 keepalived 实现 VIP 转移,lvs,nginx 的高可用](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转移,lvs,nginx的高可用](http://limian.blog.51cto.com/7542175/1301776)
|
- [基于 keepalived 实现VIP转移,lvs,nginx 的高可用 - blog.51cto.com](https://blog.51cto.com/limian/1301776)
|
||||||
|
|
Loading…
Reference in New Issue