mirror of https://github.com/easzlab/kubeasz.git
更新kube-router相关文档及清除脚本
parent
1d737f6477
commit
deb9edeab8
|
@ -49,6 +49,11 @@
|
|||
- kube-node
|
||||
- new-node
|
||||
tasks:
|
||||
- name: 清理kube-router相关
|
||||
shell: "{{ bin_dir }}/docker run --privileged --net=host cloudnativelabs/kube-router --cleanup-config"
|
||||
ignore_errors: true
|
||||
when: "CLUSTER_NETWORK == 'kube-router'"
|
||||
|
||||
- name: stop docker service
|
||||
shell: "systemctl stop docker"
|
||||
ignore_errors: true
|
||||
|
@ -90,6 +95,8 @@
|
|||
ip link del flannel.1; \
|
||||
ip link del cni0; \
|
||||
ip link del mynet0; \
|
||||
ip link del kube-bridge; \
|
||||
ip link del dummy0; \
|
||||
systemctl restart networking; \
|
||||
systemctl restart network"
|
||||
ignore_errors: true
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|k8s|v1.10.4|v1.8, v1.9, v1.10|
|
||||
|etcd|v3.3.6|v3.1, v3.2, v3.3|
|
||||
|docker|18.03.0-ce|17.*.*-ce, 18.*.*-ce|
|
||||
|network| |calico v3.0, flannel v0.10, kube-router(todo)|
|
||||
|network| |calico v3.0, flannel v0.10, kube-router|
|
||||
|
||||
-注:集群用到的所有二进制文件已打包好供下载 [https://pan.baidu.com/s/1c4RFaA](https://pan.baidu.com/s/1c4RFaA)
|
||||
|
||||
|
@ -31,13 +31,13 @@
|
|||
<td><a href="docs/00-集群规划和基础参数设定.md">00-规划集群和安装概览</a></td>
|
||||
<td><a href="docs/02-安装etcd集群.md">02-安装etcd集群</a></td>
|
||||
<td><a href="docs/04-安装kube-master节点.md">04-安装master节点</a></td>
|
||||
<td><a href="docs/06-安装calico网络组件.md">06-安装calico网络</a></td>
|
||||
<td><a href="docs/06-安装网络组件.md">06-安装集群网络</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="docs/01-创建CA证书和环境配置.md">01-创建证书和安装准备</a></td>
|
||||
<td><a href="docs/03-安装docker服务.md">03-安装docker服务</a></td>
|
||||
<td><a href="docs/05-安装kube-node节点.md">05-安装node节点</a></td>
|
||||
<td><a href="docs/06-安装flannel网络组件.md">06-安装flannel网络</a></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
# kube-router 网络组件
|
||||
|
||||
|
||||
|
||||
|
||||
## 验证
|
||||
|
||||
- 1.pod间网络联通性:略
|
||||
|
||||
- 2.host路由表
|
||||
|
||||
``` bash
|
||||
# master上路由
|
||||
root@master1:~$ ip route
|
||||
...
|
||||
172.20.1.0/24 via 192.168.1.2 dev ens3 proto 17
|
||||
172.20.2.0/24 via 192.168.1.3 dev ens3 proto 17
|
||||
...
|
||||
|
||||
# node3上路由
|
||||
root@node3:~$ ip route
|
||||
...
|
||||
172.20.0.0/24 via 192.168.1.1 dev ens3 proto 17
|
||||
172.20.1.0/24 via 192.168.1.2 dev ens3 proto 17
|
||||
172.20.2.0/24 dev kube-bridge proto kernel scope link src 172.20.2.1
|
||||
...
|
||||
```
|
||||
|
||||
- 3.bgp连接状态
|
||||
|
||||
``` bash
|
||||
# master上
|
||||
root@master1:~$ netstat -antlp|grep router|grep LISH|grep 179
|
||||
tcp 0 0 192.168.1.1:179 192.168.1.3:58366 ESTABLISHED 26062/kube-router
|
||||
tcp 0 0 192.168.1.1:42537 192.168.1.2:179 ESTABLISHED 26062/kube-router
|
||||
|
||||
# node3上
|
||||
root@node3:~$ netstat -antlp|grep router|grep LISH|grep 179
|
||||
tcp 0 0 192.168.1.3:58366 192.168.1.1:179 ESTABLISHED 18897/kube-router
|
||||
tcp 0 0 192.168.1.3:179 192.168.1.2:43928 ESTABLISHED 18897/kube-router
|
||||
|
||||
```
|
||||
|
||||
- 4.NetworkPolicy有效性,验证参照[这里](guide/networkpolicy.md)
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
## 06-安装网络组件.md
|
||||
|
||||
首先回顾下K8S网络设计原则,在配置集群网络插件或者实践K8S 应用/服务部署请时刻想到这些原则:
|
||||
|
||||
- 1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间
|
||||
- 2.集群内所有Pod都在一个直接连通的扁平网络中,可通过IP直接访问
|
||||
- 所有容器之间无需NAT就可以直接互相访问
|
||||
- 所有Node和所有容器之间无需NAT就可以直接互相访问
|
||||
- 容器自己看到的IP跟其他容器看到的一样
|
||||
- 3.Service cluster IP尽可在集群内部访问,外部请求需要通过NodePort、LoadBalance或者Ingress来访问
|
||||
|
||||
`Container Network Interface (CNI)`是目前CNCF主推的网络模型,它由两部分组成:
|
||||
|
||||
- CNI Plugin负责给容器配置网络,它包括两个基本的接口
|
||||
- 配置网络: AddNetwork(net *NetworkConfig, rt *RuntimeConf) (types.Result, error)
|
||||
- 清理网络: DelNetwork(net *NetworkConfig, rt *RuntimeConf) error
|
||||
- IPAM Plugin负责给容器分配IP地址
|
||||
|
||||
Kubernetes Pod的网络是这样创建的:
|
||||
- 0.每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的`基础容器`,比如:`mirrorgooglecontainers/pause-amd64` `registry.access.redhat.com/rhel7/pod-infrastructure`
|
||||
- 1.首先 kubelet创建`基础容器`生成network namespace
|
||||
- 2.然后 kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件
|
||||
- 3.然后 CNI 插件给`基础容器`配置网络
|
||||
- 4.最后 Pod 中其他的容器共享使用`基础容器`的网络
|
||||
|
||||
本项目基于CNI driver 调用各种网络插件来配置kubernetes的网络,常用CNI插件有 `flannel` `calico` `weave`等等,这些插件各有优势,也在互相借鉴学习优点,比如:在所有node节点都在一个二层网络时候,flannel提供hostgw实现,避免vxlan实现的udp封装开销,估计是目前最高效的;calico也针对L3 Fabric,推出了IPinIP的选项,利用了GRE隧道封装;因此这些插件都能适合很多实际应用场景。
|
||||
|
||||
项目当前内置支持的网络插件有:`calico` `flannel` `kube-router`
|
||||
|
||||
### 安装讲解请
|
||||
|
||||
- [安装calico](06.calico.md)
|
||||
- [安装flannel](06.flannel.md)
|
||||
- [安装kube-router](06.kube-router.md)
|
||||
|
||||
### 参考
|
||||
- [kubernetes.io networking docs](https://kubernetes.io/docs/concepts/cluster-administration/networking/)
|
||||
- [feiskyer-kubernetes指南网络章节](https://github.com/feiskyer/kubernetes-handbook/blob/master/zh/network/network.md)
|
|
@ -1,35 +1,10 @@
|
|||
## 06-安装calico网络组件.md
|
||||
|
||||
推荐阅读[feiskyer-kubernetes指南](https://github.com/feiskyer/kubernetes-handbook) 网络相关内容
|
||||
|
||||
首先回顾下K8S网络设计原则,在配置集群网络插件或者实践K8S 应用/服务部署请时刻想到这些原则:
|
||||
|
||||
- 1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间
|
||||
- 2.集群内所有Pod都在一个直接连通的扁平网络中,可通过IP直接访问
|
||||
- 所有容器之间无需NAT就可以直接互相访问
|
||||
- 所有Node和所有容器之间无需NAT就可以直接互相访问
|
||||
- 容器自己看到的IP跟其他容器看到的一样
|
||||
- 3.Service cluster IP尽可在集群内部访问,外部请求需要通过NodePort、LoadBalance或者Ingress来访问
|
||||
|
||||
`Container Network Interface (CNI)`是目前CNCF主推的网络模型,它由两部分组成:
|
||||
|
||||
- CNI Plugin负责给容器配置网络,它包括两个基本的接口
|
||||
- 配置网络: AddNetwork(net *NetworkConfig, rt *RuntimeConf) (types.Result, error)
|
||||
- 清理网络: DelNetwork(net *NetworkConfig, rt *RuntimeConf) error
|
||||
- IPAM Plugin负责给容器分配IP地址
|
||||
|
||||
Kubernetes Pod的网络是这样创建的:
|
||||
- 0.每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的`基础容器`,比如:`mirrorgooglecontainers/pause-amd64` `registry.access.redhat.com/rhel7/pod-infrastructure`
|
||||
- 1.首先 kubelet创建`基础容器`生成network namespace
|
||||
- 2.然后 kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件
|
||||
- 3.然后 CNI 插件给`基础容器`配置网络
|
||||
- 4.最后 Pod 中其他的容器共享使用`基础容器`的网络
|
||||
|
||||
本文档基于CNI driver 调用calico 插件来配置kubernetes的网络,常用CNI插件有 `flannel` `calico` `weave`等等,这些插件各有优势,也在互相借鉴学习优点,比如:在所有node节点都在一个二层网络时候,flannel提供hostgw实现,避免vxlan实现的udp封装开销,估计是目前最高效的;calico也针对L3 Fabric,推出了IPinIP的选项,利用了GRE隧道封装;因此这些插件都能适合很多实际应用场景,这里选择calico,主要考虑它支持 `kubernetes network policy`。
|
||||
|
||||
推荐阅读[calico kubernetes guide](https://docs.projectcalico.org/v3.0/getting-started/kubernetes/)
|
||||
|
||||
calico-node需要在所有master节点和node节点安装
|
||||
本项目提供多种网络插件可选,如果需要安装calico,请在/etc/ansible/hosts文件中设置变量 `CLUSTER_NETWORK="kube-router"`
|
||||
|
||||
- calico-node需要在所有master节点和node节点安装
|
||||
|
||||
``` bash
|
||||
roles/calico/
|
||||
|
@ -80,6 +55,7 @@ roles/calico/
|
|||
+ 配置集群POD网络 CALICO_IPV4POOL_CIDR={{ CLUSTER_CIDR }}
|
||||
+ **重要**本K8S集群运行在同网段kvm虚机上,虚机间没有网络ACL限制,因此可以设置`CALICO_IPV4POOL_IPIP=off`,如果你的主机位于不同网段,或者运行在公有云上需要打开这个选项 `CALICO_IPV4POOL_IPIP=always`
|
||||
+ 配置FELIX_DEFAULTENDPOINTTOHOSTACTION=ACCEPT 默认允许Pod到Node的网络流量,更多[felix配置选项](https://docs.projectcalico.org/v2.6/reference/felix/configuration)
|
||||
+ 多网卡服务器运行kube-controller可能会出现问题,本项目已通过增加设置环境变量`KUBERNETES_SERVICE_HOST`和`KUBERNETES_SERVICE_PORT`解决
|
||||
|
||||
### 安装calico 网络
|
||||
|
||||
|
@ -168,18 +144,6 @@ tcp 0 0 192.168.1.66:179 192.168.1.34:40243 ESTABLISHED
|
|||
tcp 0 0 192.168.1.66:179 192.168.1.63:48979 ESTABLISHED 28479/bird
|
||||
```
|
||||
|
||||
**查看集群ipPool情况**
|
||||
|
||||
``` bash
|
||||
calicoctl get ipPool -o yaml
|
||||
- apiVersion: v1
|
||||
kind: ipPool
|
||||
metadata:
|
||||
cidr: 172.20.0.0/16
|
||||
spec:
|
||||
nat-outgoing: true
|
||||
```
|
||||
|
||||
**查看etcd中calico相关信息**
|
||||
|
||||
因为这里calico网络使用etcd存储数据,所以可以在etcd集群中查看数据
|
||||
|
@ -200,4 +164,3 @@ ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" get --prefix /calico/i
|
|||
etcdctl --endpoints=http://127.0.0.1:2379 --ca-file=/etc/kubernetes/ssl/ca.pem ls /calico
|
||||
```
|
||||
|
||||
[前一篇](06-安装kube-node节点.md) -- [后一篇]()
|
|
@ -1,8 +1,6 @@
|
|||
## 06-安装flannel网络组件.md
|
||||
|
||||
** 注意: ** 只需选择安装`calico` `flannel`其中之一,如果你已经安装了`calico`,请跳过此步骤。
|
||||
|
||||
关于k8s网络设计和CNI Plugin的介绍请阅读[安装calico](07-安装calico网络组件.md)中相关内容。
|
||||
本项目提供多种网络插件可选,如果需要安装flannel,请在/etc/ansible/hosts文件中设置变量 `CLUSTER_NETWORK="flannel"`
|
||||
|
||||
`Flannel`是最早应用到k8s集群的网络插件之一,简单高效,且提供多个后端`backend`模式供选择;本文介绍以`DaemonSet Pod`方式集成到k8s集群,需要在所有master节点和node节点安装。
|
||||
|
||||
|
@ -126,4 +124,3 @@ ping 172.20.1.5
|
|||
ping 172.20.0.6
|
||||
```
|
||||
|
||||
[前一篇](06-安装kube-node节点.md) -- [后一篇]()
|
|
@ -0,0 +1,107 @@
|
|||
# kube-router 网络组件
|
||||
|
||||
kube-router是一个简单、高效的网络插件,它提供一揽子解决方案:
|
||||
- 基于GoBGP 提供Pod 网络互联(Routing)
|
||||
- 使用ipsets优化的iptables 提供网络策略支持(Firewall/NetworkPolicy)
|
||||
- 基于IPVS/LVS 提供高性能服务代理(Service Proxy)
|
||||
|
||||
更多介绍请前往`https://github.com/cloudnativelabs/kube-router`
|
||||
|
||||
## 配置
|
||||
|
||||
本项目提供多种网络插件可选,如果需要安装kube-router,请在/etc/ansible/hosts文件中设置变量 `CLUSTER_NETWORK="kube-router"`
|
||||
|
||||
- kube-router需要在所有master节点和node节点安装
|
||||
|
||||
## 安装
|
||||
|
||||
- 单步安装已经集成:`ansible-playbook 90.setup.yml`
|
||||
- 分步安装请执行:`ansible-playbook 06.network.yml`
|
||||
|
||||
## 验证
|
||||
|
||||
- 1.pod间网络联通性:略
|
||||
|
||||
- 2.host路由表
|
||||
|
||||
``` bash
|
||||
# master上路由
|
||||
root@master1:~$ ip route
|
||||
...
|
||||
172.20.1.0/24 via 192.168.1.2 dev ens3 proto 17
|
||||
172.20.2.0/24 via 192.168.1.3 dev ens3 proto 17
|
||||
...
|
||||
|
||||
# node3上路由
|
||||
root@node3:~$ ip route
|
||||
...
|
||||
172.20.0.0/24 via 192.168.1.1 dev ens3 proto 17
|
||||
172.20.1.0/24 via 192.168.1.2 dev ens3 proto 17
|
||||
172.20.2.0/24 dev kube-bridge proto kernel scope link src 172.20.2.1
|
||||
...
|
||||
```
|
||||
|
||||
- 3.bgp连接状态
|
||||
|
||||
``` bash
|
||||
# master上
|
||||
root@master1:~$ netstat -antlp|grep router|grep LISH|grep 179
|
||||
tcp 0 0 192.168.1.1:179 192.168.1.3:58366 ESTABLISHED 26062/kube-router
|
||||
tcp 0 0 192.168.1.1:42537 192.168.1.2:179 ESTABLISHED 26062/kube-router
|
||||
|
||||
# node3上
|
||||
root@node3:~$ netstat -antlp|grep router|grep LISH|grep 179
|
||||
tcp 0 0 192.168.1.3:58366 192.168.1.1:179 ESTABLISHED 18897/kube-router
|
||||
tcp 0 0 192.168.1.3:179 192.168.1.2:43928 ESTABLISHED 18897/kube-router
|
||||
|
||||
```
|
||||
|
||||
- 4.NetworkPolicy有效性,验证参照[这里](guide/networkpolicy.md)
|
||||
|
||||
- 5.ipset列表查看
|
||||
|
||||
``` bash
|
||||
ipset list
|
||||
...
|
||||
Name: kube-router-pod-subnets
|
||||
Type: hash:net
|
||||
Revision: 6
|
||||
Header: family inet hashsize 1024 maxelem 65536 timeout 0
|
||||
Size in memory: 672
|
||||
References: 2
|
||||
Members:
|
||||
172.20.1.0/24 timeout 0
|
||||
172.20.2.0/24 timeout 0
|
||||
172.20.0.0/24 timeout 0
|
||||
|
||||
Name: kube-router-node-ips
|
||||
Type: hash:ip
|
||||
Revision: 4
|
||||
Header: family inet hashsize 1024 maxelem 65536 timeout 0
|
||||
Size in memory: 416
|
||||
References: 1
|
||||
Members:
|
||||
192.168.1.1 timeout 0
|
||||
192.168.1.2 timeout 0
|
||||
192.168.1.3 timeout 0
|
||||
...
|
||||
```
|
||||
|
||||
- 6.ipvs虚拟服务器查看
|
||||
|
||||
``` bash
|
||||
# 首先创建测试应用
|
||||
$ kubectl run nginx --image=nginx --replicas=3 --port=80 --expose
|
||||
|
||||
# 查看ipvsadm输出
|
||||
$ ipvsadm
|
||||
IP Virtual Server version 1.2.1 (size=4096)
|
||||
Prot LocalAddress:Port Scheduler Flags
|
||||
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
|
||||
TCP 10.68.0.1:https rr persistent 10800 # 这个kubernetes虚拟服务地址
|
||||
-> 192.168.1.1:6443 Masq 1 0 0
|
||||
TCP 10.68.199.39:http rr # 这个是测试应用nginx的虚拟服务地址
|
||||
-> 172.20.1.5:http Masq 1 0 0
|
||||
-> 172.20.2.6:http Masq 1 0 0
|
||||
-> 172.20.2.8:http Masq 1 0 0
|
||||
```
|
|
@ -1,4 +1,10 @@
|
|||
## ---------docker daemon配置部分-----------
|
||||
- name: 准备docker相关目录
|
||||
file: name={{ item }} state=directory
|
||||
with_items:
|
||||
- "{{ bin_dir }}"
|
||||
- /etc/docker
|
||||
|
||||
- name: 下载 docker 二进制文件
|
||||
copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755
|
||||
with_items:
|
||||
|
|
Loading…
Reference in New Issue