Ingress 优化 ,CNI 优化
This commit is contained in:
@ -10,11 +10,12 @@
|
||||
<div style="margin-top: 10px;">
|
||||
<span style="font-size: 13px;">扫第一个二维码完成打赏,扫第二个进微信群聊</span>
|
||||
<p style="margin-top: 10px;">
|
||||
<img src="/dz.png" style="width: 150px; margin-right: 150px;"></img>
|
||||
<img src="/dz2.jpeg" style="width: 150px;"></img>
|
||||
<img src="/images/dz.png" style="width: 150px; margin-right: 150px;"></img>
|
||||
<img src="/images/dz2.jpeg" style="width: 150px;"></img>
|
||||
</p>
|
||||
</div>
|
||||
<div style="margin-bottom: 10px;">不方便给打赏的话,那就 <span style="color: red;">给一个 github star</span> 吧!</div>
|
||||
<div style="margin-bottom: 10px;">github star 后,本窗口将不再弹出</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="waitAMoment">一会儿再说</el-button>
|
||||
|
||||
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
<slot name="top"/>
|
||||
|
||||
<Content class="theme-default-content"/>
|
||||
<div style="text-align: center; margin-bottom: 10px; margin-bottom: -80px;">
|
||||
<div style="text-align: center; margin-bottom: 10px;">
|
||||
<a href="https://github.com/eip-work/kuboard-press" target="_blank">如果您觉得这篇文档有帮到您,点击此处,给个 Github Star,谢谢!</a>
|
||||
</div>
|
||||
<!-- <Valine></Valine> -->
|
||||
|
||||
@ -5,7 +5,7 @@ description: 在 Kubernetes 中,通过 Service 连接应用程序
|
||||
|
||||
# 如何选择网络插件
|
||||
|
||||
本文转载自: https://www.toutiao.com/a6708893686517727748/
|
||||
本文转载自: [kubernetes网络插件对比分析(flannel、calico、weave)](https://www.toutiao.com/a6708893686517727748/)
|
||||
|
||||
原文作者:残花花败柳柳
|
||||
|
||||
@ -38,9 +38,9 @@ Docker还可以让用户通过其他驱动程序和插件,来配置更高级
|
||||
|
||||
CNI的初衷是创建一个框架,用于在配置或销毁容器时动态配置适当的网络配置和资源。下面链接中的CNI规范概括了用于配制网络的插件接口,这个接口可以让容器运行时与插件进行协调:
|
||||
|
||||
```
|
||||
https://github.com/containernetworking/cni/blob/master/SPEC.md
|
||||
```
|
||||
|
||||
[CND SPEC](https://github.com/containernetworking/cni/blob/master/SPEC.md)
|
||||
|
||||
|
||||
插件负责为接口配置和管理IP地址,并且通常提供与IP管理、每个容器的IP分配、以及多主机连接相关的功能。容器运行时会调用网络插件,从而在容器启动时分配IP地址并配置网络,并在删除容器时再次调用它以清理这些资源。
|
||||
|
||||
@ -68,13 +68,13 @@ https://github.com/containernetworking/cni/blob/master/SPEC.md
|
||||
|
||||
**Flannel**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
```
|
||||
链接:https://github.com/coreos/flannel
|
||||
```
|
||||
|
||||
[flannel github 仓库](https://github.com/coreos/flannel)
|
||||
|
||||
|
||||
由CoreOS开发的项目Flannel,可能是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。随着CNI概念的兴起,Flannel CNI插件算是早期的入门。
|
||||
|
||||
@ -88,13 +88,12 @@ Flannel有几种不同类型的后端可用于封装和路由。默认和推荐
|
||||
|
||||
**Calico**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
```
|
||||
链接:https://github.com/projectcalico/cni-plugin
|
||||
```
|
||||
[Calico github 仓库](https://github.com/projectcalico/cni-plugin)
|
||||
|
||||
|
||||
Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。
|
||||
|
||||
@ -110,13 +109,12 @@ Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel
|
||||
|
||||
**Weave**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
```
|
||||
链接:https://www.weave.works/oss/net/
|
||||
```
|
||||
[weave 官网](https://www.weave.works/oss/net/)
|
||||
|
||||
|
||||
Weave是由Weaveworks提供的一种Kubernetes CNI网络选项,它提供的模式和我们目前为止讨论的所有网络方案都不同。Weave在集群中的每个节点之间创建网状Overlay网络,参与者之间可以灵活路由。这一特性再结合其他一些独特的功能,在某些可能导致问题的情况下,Weave可以智能地路由。
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 386 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 197 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 437 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 205 KiB |
@ -17,17 +17,18 @@ Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过
|
||||
|
||||
Ingress Controller (通常需要负载均衡器配合)负责实现 Ingress API 对象所声明的能力。如下图所示:
|
||||
|
||||
* Ingress Controller 监听所有 worker 节点上的 80/443 端口
|
||||
* Ingress Controller 将所有对域名为 a.kuboard.cn 的 HTTP/HTTPS 请求路由到 Service B 的 9080 端口
|
||||
* Service B 将请求进一步转发到其标签所选择的 Pod 容器组(通过 targetPort 指定容器组上的端口号)
|
||||
1. Ingress Controller 监听所有 worker 节点上的 80/443 端口
|
||||
2. Ingress Controller 将所有对域名为 a.kuboard.cn 的 HTTP/HTTPS 请求路由到 Service B 的 9080 端口
|
||||
3. Service B 将请求进一步转发到其标签所选择的 Pod 容器组(通过 targetPort 指定容器组上的端口号)
|
||||
|
||||
在下图的 Ingress B 及 Service B 被正确配置的情况下,您将获得如下效果:
|
||||
* 将 a.kuboard.cn 解析到任意一个 worker 节点的外网 IP 地址(也可以是内网 IP 地址,但此时您的客户端机器也必须在内网)
|
||||
* 从客户端机器执行命令 `curl http://a.kuboard.cn` 您将获得如下容器组当中一个的返回结果: 10.10.10.2、10.10.10.4、10.10.10.3
|
||||
|
||||
<img src="./ingress.assets/image-20190827183054487.png" style="border: 1px solid #d7dae2; max-width: 720px;"></img>
|
||||
该图中,**请求被转发的过程为:**
|
||||
|
||||
0. 假设您将 a.kuboard.cn 的 DNS 解析到了集群中的一个 worker 节点的 IP 地址 `192.168.2.69`。(如果您的 worker 节点有外网地址,请使用外网地址,这样可以使的您从外网访问您的服务)
|
||||
1. 从客户端机器执行命令 `curl http://a.kuboard.cn/abc/`,该请求您将被转发到 `192.168.2.69` 这个地址的 80 端口,并被 Ingress Controller 接收
|
||||
2. Ingress Controller 根据请求的域名 `a.kuboard.cn` 和路径 `abc` 匹配集群中所有的 Ingress 信息,并最终找到 `Ingress B` 中有这个配置,其对应的 Service 为 `Service B` 的 `9080` 端口
|
||||
3. Ingress Controller 通过 kube-proxy 将请求转发到 `Service B` 对应的任意一个 Pod 上 与 `Service B` 的 `9080` 端口对应的容器端口上。(从 Ingress Controller 到 Pod 的负载均衡由 kube-proxy + Service 实现)
|
||||
|
||||
<img src="./ingress.assets/image-20190910222649193.png" style="border: 1px solid #d7dae2; max-width: 720px;"></img>
|
||||
|
||||
## Ingress Controller
|
||||
|
||||
@ -45,7 +46,6 @@ Ingress Controller 有多种实现可供选择,请参考 Kubernetes 官方文
|
||||
|
||||
> 如果您打算使用其他 Ingress Controller,您可以 [卸载 Nginx Ingress Controller](/install/install-k8s.html#安装-ingress-controller);如果您尚未安装任何 Ingress Controller,请参考 [安装 Nginx Ingress Controller](/install/install-k8s.html#安装-ingress-controller),以便可以完成本教程的后续内容。
|
||||
|
||||
|
||||
``` yaml {2,23,26}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: DaemonSet
|
||||
@ -125,6 +125,61 @@ spec:
|
||||
|
||||
::: tab 使用kubectl lazy
|
||||
|
||||
**创建文件 nginx-deployment.yaml**
|
||||
``` sh
|
||||
vim nginx-deployment.yaml
|
||||
```
|
||||
|
||||
**文件内容如下**
|
||||
|
||||
``` yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: nginx-deployment
|
||||
labels:
|
||||
app: nginx
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: nginx
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: nginx
|
||||
spec:
|
||||
containers:
|
||||
- name: nginx
|
||||
image: nginx:1.7.9
|
||||
```
|
||||
|
||||
**创建文件 nginx-service.yaml**
|
||||
``` sh
|
||||
vim nginx-service.yaml
|
||||
```
|
||||
|
||||
**文件内容如下**
|
||||
|
||||
``` yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: nginx-service
|
||||
labels:
|
||||
app: nginx
|
||||
spec:
|
||||
selector:
|
||||
app: nginx
|
||||
ports:
|
||||
- name: nginx-port
|
||||
protocol: TCP
|
||||
port: 80
|
||||
nodePort: 32600
|
||||
targetPort: 80
|
||||
type: NodePort
|
||||
```
|
||||
|
||||
**创建文件 nginx-ingress.yaml**
|
||||
``` sh
|
||||
vim nginx-ingress.yaml
|
||||
@ -132,9 +187,6 @@ vim nginx-ingress.yaml
|
||||
|
||||
**文件内容如下**
|
||||
|
||||
<CodeSwitcher :languages="{comment:'有注释',nocomment:'无注释'}" :isolated="true">
|
||||
<template v-slot:comment>
|
||||
|
||||
``` yaml
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
kind: Ingress
|
||||
@ -150,31 +202,13 @@ spec:
|
||||
serviceName: nginx-service # 指定后端的 Service 为之前创建的 nginx-service
|
||||
servicePort: 80
|
||||
```
|
||||
</template>
|
||||
<template v-slot:nocomment>
|
||||
|
||||
``` yaml
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: my-ingress-for-nginx
|
||||
spec:
|
||||
rules:
|
||||
- host: a.demo.kuboard.cn
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
backend:
|
||||
serviceName: nginx-service
|
||||
servicePort: 80
|
||||
```
|
||||
|
||||
</template>
|
||||
</CodeSwitcher>
|
||||
|
||||
**执行命令**
|
||||
|
||||
``` sh
|
||||
kubectl apply -f nginx-deployment.yaml
|
||||
kubectl apply -f nginx-service.yaml
|
||||
kubectl apply -f nginx-ingress.yaml
|
||||
```
|
||||
|
||||
@ -196,23 +230,30 @@ curl a.demo.kuboard.cn
|
||||
|
||||
::: tab 使用Kuboard lazy
|
||||
|
||||
* 在 default 名称空间 点击 ***展现层 --> Nginx部署***
|
||||
* 在 default 名称空间 点击 ***创建工作负载***
|
||||
|
||||
* 点击 ***编辑*** 按钮
|
||||
填写表单如下:
|
||||
|
||||
* 填写表单如下:
|
||||
* 开启 **互联网入口 Ingress**
|
||||
* 填写一条记录:
|
||||
| 字段名称 | 填写内容 | 备注 |
|
||||
| ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 服务类型 | Deployment | |
|
||||
| 服务分层 | 展现层 | |
|
||||
| 服务名称 | web-nginx | |
|
||||
| 服务描述 | nginx部署 | |
|
||||
| 副本数量 | 1 | 可以填写其他正整数 |
|
||||
| 工作容器 | 容器名称:nginx<br />镜像:nginx:1.7.9<br />抓取策略:Always | |
|
||||
| 访问方式 | NodePort(VPC内访问)<br />协议: TCP,服务端口: 80,节点端口: 32601,容器端口: 80 | 访问方式对应 Kubernetes Service对象,<br />工作负载编辑器为其使用与 Deployment 相同的名字 web-nginx |
|
||||
| 互联网入口 | 域名: a.demo.kuboard.cn<br />映射URL: /<br />服务端口:80 | 互联网入口对应 Kubernetes Ingress对象,<br />工作负载编辑器为其使用与 Deployment 相同的名字 web-nginx |
|
||||
|
||||
| 协议 | 服务端口 | 节点端口 |
|
||||
| ----------------- | ----------------- | -------- |
|
||||
| 域名 | a.demo.kuboard.cn | 32601 |
|
||||
| 路由配置/映射URL | / | |
|
||||
| 路由配置/服务端口 | 80 | |
|
||||
|
||||
|
||||
**如下图所示:**
|
||||
* **如下图所示:**
|
||||
|
||||

|
||||

|
||||
|
||||
::: tip
|
||||
Kuboard 工作负载编辑器将 kubernetes 中三个主要对象 Deployment/Service/Ingress 放在同一个编辑器界面中处理。
|
||||
:::
|
||||
|
||||
* 点击 **保存**
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ ReplicaSet 副本集的主要几个字段有:
|
||||
|
||||
副本集将通过创建、删除 Pod 容器组来确保符合 selector 选择器的 Pod 数量等于 replicas 指定的数量。当符合 selector 选择器的 Pod 数量不够时,副本集通过使用 template 中的定义来创建 Pod。
|
||||
|
||||
在 Kubernetes 中,并不建议您直接使用 ReplicaSet,推荐使用 Deployment,由 Deployment 创建和管理 ReplicaSet。
|
||||
在 Kubernetes 中,并不建议您直接使用 ReplicaSet,推荐使用 Deployment,由 Deployment 创建和管理 ReplicaSet。 关于副本集的更多信息,请参考 Kubernetes 官网文档 [ReplicaSet](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/)
|
||||
|
||||
## Deployment 概述
|
||||
|
||||
|
||||
Reference in New Issue
Block a user