k8s使用calico网络
calico是一个安全的 L3 网络和网络策略提供者。
calico使用bgp的原因:why bgp not ospf
有关BGP rr的介绍
安装方式
标准托管安装(ETCD存储)
- 需要提前安装etcd集群
# 创建calico连接etcd的secret kubectl create secret generic calico-etcd-secrets \ --from-file=etcd-key=/etc/kubernetes/ssl/kubernetes-key.pem \ --from-file=etcd-cert=/etc/kubernetes/ssl/kubernetes.pem \ --from-file=etcd-ca=/etc/kubernetes/ssl/ca.pem # 部署 kubectl create -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/calico.yaml # rbac kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/rbac.yaml
kubeadm 托管部署
依赖
- k8s1.7+
- 没有其他cni插件(华为开源的CNI-Genie可以同时运行多个CNI)
- –pod-network-cidr参数需要和calico ip pool保持一致
- –service-cidr 不能和calico ip pool重叠
部署
kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
Kubernetes 数据存储托管安装(不需要etcd)
依赖
- 暂时不支持ipam,推荐使用 host-local ipam与pod cidr结合使用
- 默认使用node-to-node mesh模式
- k8s1.7+
- 配置使用CNI
- controller-manager配置cluster-cidr
部署
# rbac kubectl create -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml # 部署 kubectl create -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
仅使用网络策略
kubectl create -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubernetes-datastore/policy-only/1.7/calico.yaml
canal
canal旨在让用户能够轻松地将Calico和flannel网络作为一个统一的网络解决方案进行部署.
kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/rbac.yaml kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/canal.yaml
配置
环境设置
# etcd数据存储 export ETCD_ENDPOINTS=http://xxx:2379 # k8s数据存储 export DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config
typha模式
k8s数据存储模式超过50各节点推荐启用typha,Typha组件可以帮助Calico扩展到大量的节点,而不会对Kubernetes API服务器造成过度的影响。 修改typha_service_name "none"改为"calico-typha"。
禁用snat
calicoctl get ipPool -o yaml | sed 's/natOutgoing: true/natOutgoing: false/g' | calicoctl apply -f -
关闭node-to-node mesh (节点网络全互联)
cat << EOF apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: logSeverityScreen: Info nodeToNodeMeshEnabled: false asNumber: 64512 EOF | calicoctl apply -f - calicoctl node status
创建IP Pool
calicoctl get ippool default-ipv4-ippool -o yaml
配置bird服务
yum install bird service bird start cat >> /etc/bird.conf < EOF log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug }; log stderr all; # Override router ID router id 172.26.6.1; filter import_kernel { if ( net != 0.0.0.0/0 ) then { accept; } reject; } # Turn on global debugging of all protocols debug protocols all; # This pseudo-protocol watches all interface up/down events. protocol device { scan time 2; # Scan interfaces every 2 seconds } protocol bgp { description "172.26.6.2"; local as 64512; neighbor 172.26.6.2 as 64512; multihop; rr client; graceful restart; import all; export all; } protocol bgp { description "172.26.6.3"; local as 64512; neighbor 172.26.6.3 as 64512; multihop; rr client; graceful restart; import all; export all; } EOF
IP-IN-IP
calicoctl get ippool default-ipv4-ippool -o yaml > pool.yaml # 修改Off/Always/CrossSubnet calicoctl apply -f pool.yaml 例: # 所有工作负载 $ calicoctl apply -f - << EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: ippool-ipip-1 spec: cidr: 192.168.0.0/16 ipipMode: Always natOutgoing: true EOF # CrossSubnet $ calicoctl apply -f - << EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: ippool-cs-1 spec: cidr: 192.168.0.0/16 ipipMode: CrossSubnet natOutgoing: true EOF #通过修改配置文件环境变量 CALICO_IPV4POOL_IPIP 参数值 Off, Always, CrossSubnet 如果您的网络结构执行源/目标地址检查,并在未识别这些地址时丢弃流量,则可能需要启用工作负载间流量的IP-in-IP封装
bgp peer
查看状态
calicoctl node status
配置全局 bgp peer(rr)
cat << EOF | calicoctl create -f - apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: bgppeer-global-3040 spec: peerIP: 172.26.6.1 asNumber: 64567 EOF # 删除 $ calicoctl delete bgpPeer 172.26.6.1
特定 BGP peer
$ cat << EOF | calicoctl create -f - apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: bgppeer-node-aabbff spec: peerIP: aa:bb::ff node: node1 asNumber: 64514 EOF calicoctl delete bgpPeer aa:bb::ff --scope=node --node=node1 calicoctl get bgpPeer
本文转自kubernetes中文社区- k8s使用calico网络 低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kubernetes 可扩展 Admission 进入 Beta 阶段
Kubernetes API Server 中有一个功能,能让用户(对工作负载)进行决策,这一功能在 1.9 中已经走入成熟期。 Admission 是 Kubernetes 中最强大的工具之一,可以通过限制创建对象的方式来增强 Kubernetes 集群的安全性,这部分一直是编译在代码之中的。在 1.9 中,我们将 Admission 的 Webhook 升级成 Beta,让用户可以在 API Server 之外对 Admission 施加影响。 Admission 是什么? Admission(注1),是在认证之后,资源持久化之前 的一个处理 API Server 请求的步骤。Admission 能获取到和认证过程一致的信息(用户、URL 等),以及绝大多数 API 请求的完整报文。 Admission 阶段由不同插件组成,每个 Admission 都会对一个侧面进行观察和操作。例如:影响调度决策的PodNodeSelector、阻止恶意容器的PodSecurityPolicy以及实现 Namespace 资源分配的ResourceQuota。 Admission 内部分为两个阶段...
- 下一篇
从美图容器优化实践谈Kubernetes网络方案设计
本文通过介绍美图线上容器化的实践经验,包括线上遇到的实际问题,来探讨 Kubernetes 环境下的网络方案设计。值得正在转型 K8S 的架构师学习和借鉴。 李连荣,美图高级系统研发工程师,曾建立支持千万的长连接服务,从零开始在建立美图的容器化服务,并主导完成美图容器化的网络方案。在网络、存储方面有非常深厚的造诣。 目前,我们的 Kubernetes 集群选择使用 Calico 作为基础网络方案。 选择 Calico 网络方案的挑战 Calico 是一套基于路由(BGP)的 SDN,它通过路由转发的方式实现容器的跨主机通信。Calico 将每个节点虚拟为一个“路由器”并为之分配独立的虚拟网段,该路由器为当前节点上的容器提供路由服务。 更多 Calico 项目介绍可参阅 https://www.projectcalico.org/ 下面以具体网络为例介绍其中的设计与难点。 以上图为例,如果节点 192.168.1.2 分配的虚拟网段是 10.233.1.0/24,其上运行了一个容器 10.233.1.2,其路由信息如下: 10.233.1.2 0.0.0.0 255.255.255.25...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果