docker 集群 flannel网络构建

先保证集群状态是正常的

 

集群管理

kubelet 在创建pod 时会先下载一个pause 镜像,这个镜像用于容器基础网络管理
非常重要: 每个node 节点都要执行该操作:

 

iptables -P FORWARD ACCEPT
iptables-save

1、flannel 介绍


Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址
在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信

 

2、flannel工作于原理

Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式

 

3、部署flannel网络

 

etcd创建flanneld网络

etcdctl --endpoints http://192.168.10.221:2379 \
set /coreos.com/network/config '{"NetWork":"10.0.0.0/16"}'




[root@node1 ~]# tar xf flannel-v0.9.1.tar.gz [root@node1 ~]# cd flannel-v0.9.1 [root@node1 flannel-v0.9.1]# cp flanneld mk-docker-opts.sh /usr/local/bin/ [root@node1 flannel-v0.9.1]# cd conf/ [root@node1 conf]# cp *.service /usr/lib/systemd/system cp: overwrite ‘/usr/lib/systemd/system/docker.service’? y 覆盖docker的启动脚本 [root@node1 conf]# [root@node1 conf]# cp flanneld /etc/sysconfig/ [root@node1 conf]# vi /etc/sysconfig/flanneld [root@node1 conf]# [root@node1 conf]# [root@node1 conf]# cat /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://192.168.10.221:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_KEY="/coreos.com/network" FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.10.221:2379 --ip-masq=true" # Any additional options that you want to pass #FLANNEL_OPTIONS="" 重启flannel 和docker systemctl daemon-reload systemctl start flanneld && systemctl enable flanneld systemctl restart docker

检测状态

 

 

node2节点上面做同样的操作

 

 

 跨主机容器网络通信测试

[root@manager ~]# cat bs1.yaml 
apiVersion: v1
kind: Pod
metadata: 
    name: busybox
    namespace: default
spec:
    containers:
      - image: busybox
        command:
          - sleep
          - "3600"
        imagePullPolicy: IfNotPresent
        name: busybox
    restartPolicy: Always
[root@manager ~]# 
[root@manager ~]# cat bs2.yaml 
apiVersion: v1
kind: Pod
metadata: 
    name: busybox2
    namespace: default
spec:
    containers:
      - image: busybox
        command:
          - sleep
          - "36000"
        imagePullPolicy: IfNotPresent
        name: busybox2
    restartPolicy: Always
[root@manager ~]# 
[root@manager ~]# kubectl create -f bs1.yaml
[root@manager ~]# kubectl create -f bs2.yaml

 

 

 

 

 

可以看到容器间网络通讯正常,可以访问外网,但是还是无法解析域名,下次我们介绍  dns

posted @ 2018-01-31 12:38  厚德载物_VIP  阅读(377)  评论(0编辑  收藏  举报