k8s使用calico网络

calico是一个安全的 L3 网络和网络策略提供者。 安装方式 标准托管安装(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插件 –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插件 –pod-network-cidr参数需要和calico ip pool保持一致 –service-cidr 不能和calico ip pool重叠 # rbac kubectl create -f https://docs.

阅读全文

生成k8s证书的三种方式

生成证书 根据官方文档,生成k8s秘钥证书及相关管理证书有三种方式,其本质都是通过openssl cfssl easyrsa openssl 官方文档 cfssl方式 cfssl下载地址 VERSION=R1.2 for i in {cfssl,cfssljson,cfssl-certinfo} do wget https://pkg.cfssl.org/${VERSION}/${i}_linux-amd64 -O /usr/local/bin/${i} done 创建CA证书 生成CA配置文件 mkdir ssl && cd ssl cfssl print-defaults config > config.json cfssl print-defaults csr > csr.json cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "87600h" } } } } EOF 生成CA签名配置文件 cat > ca-csr.

阅读全文

介绍 k8s中资源限制分别为requests(需求)和limits(限制) 分类 request: 保留的资源 limit: 最大占用的资源 查看pod内容器的资源限制 kubectl get pods --namespace=test test -o template --template='{{range .spec.containers}}{{.resources}}{{end}}' requests与limit值范围如下: 0 <= requests <= NodeAllocatable requests <= limits <= Infinity 根据request与limit的比较大小分为以下三种qos Guaranteed pod中所有容器都必须统一设置limits,并且设置参数都一致,如果有一个容器要设置requests,那么所有容器都要设置,并设置参数同limits一致,那么这个pod的QoS就是Guaranteed级别。 Burstable pod中只要有一个容器的requests和limits的设置不相同,该pod的QoS即为Burstable。 Best-Effort 如果对于全部的resources来说requests与limits均未设置,该pod的QoS即为Best-Effort。 查看qosClass: kubectl get pods --namespace=test test -o template --template='{{.status.qosClass}}' 判断代码如下: if len(requests) == 0 && len(limits) == 0 { return v1.PodQOSBestEffort } // Check is requests match limits for all resources.

阅读全文

kube-router 实战

kube-router 实战 官网 kube-router官方文档 中文版文档 介绍 kube-router - 使用iptables实现网络策略限制。 –run-router参数,可透传源IP。 - 通过bgp实现路由策略。 –run-firewall 参数 - 通过lvs实现代理策略。 –run-service-proxy –run-firewall, –run-router, –run-service-proxy可以有选择地只启用kube-router所需的功能 只提供入口防火墙:–run-firewall=true –run-service-proxy=false –run-router=false 仅仅替换kube-proxy: –run-service-proxy=true –run-firewall=false –run-router=false 网络功能介绍 代理功能介绍 网络策功能略介绍 Kube-router:在裸机上Kubernetes集群的高可用和可扩展性 查看CIDR划分 kubectl get nodes -o json | jq '.items[] | .spec' 安装kube-router 依赖 已有k8s集群 kube-router 能够连接apiserver controller-manager必要配置参数 –allocate-node-cidrs=true –cluster-cidr=10.254.0.0/16,示例: /usr/local/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://127.0.0.1:8080 --address=127.0.0.1 --allocate-node-cidrs=true --cluster-cidr=10.254.0.0/16 --node-cidr-mask-size=24 --cluster-name=kubernetes --use-service-account-credentials --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem --service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem --root-ca-file=/etc/kubernetes/ssl/ca.pem --leader-elect=true 直接在主机运行需要有ipset命令 以daemonseset 运行需要开启–allow-privileged=true 默认情况下pod并不能访问所属的svc,想要访问需要开启发夹模式,介绍 需要在kube-router守护进程清单中启用hostIPC:true和hostPID:true。并且必须将主路径/var/run/docker.

阅读全文

[译]Kube Router Documentation

体系结构 Kube-router是围绕观察者和控制器的概念而建立的。 观察者使用Kubernetes监视API来获取与创建,更新和删除Kubernetes对象有关的事件的通知。 每个观察者获取与特定API对象相关的通知。 在从API服务器接收事件时,观察者广播事件。 控制器注册以获取观察者的事件更新,并处理事件。 Kube-router由3个核心控制器和多个观察者组成,如下图所示。 每个 controller 遵循以下结构 func Run() { for { Sync() // control loop that runs for ever and perfom sync at periodic interval } } func OnUpdate() { Sync() // on receiving update of a watched API object (namespace, node, pod, network policy etc) } Sync() { //re-concile any state changes } Cleanup() { // cleanup any changes (to iptables, ipvs, network etc) done to the system } 查看Kube-router实战 网络服务控制器 网络服务控制器负责从Kubernetes API服务器读取服务和端点信息,并相应地在每个群集节点上配置IPVS。

阅读全文

代理、api网关与servicemesh

代理 四层 lvs haproxy F5 四层代理基于ip+port的负载均衡,功能: 全流量转发(mysql、redis等) 优势: 性能好,资源消耗低 应用广泛 配置项较少(也是劣势) 劣势: - 可配置化程度低 七层 nginx haproxy Træfik 七层代理现在主要应用于HTTP协议,功能: 请求链接的负载均衡. 智能请求路由。 防御攻击(syn攻击)。 优势: 匹配规则灵活 对网络稳定性依赖较小 配置灵活 能用七层不用四层,七层可定制化程度高。 api网关 kong orange openresty zuul 功能: 服务发现 负载均衡 请求路由熔断 身份认证 熔断 流量管控 链路跟踪 监控 缺陷: 维护复杂的路由逻辑 service mesh 服务网格分为控制面板和数据面板 控制面板 linkerd envoy conduit-proxy 数据面板 conduit istio contour (基于envoy) 相对于apigateway优势 集成服务发现 分布式系统,解耦,控制面板负责管理配置,数据面板根据配置进行相应的动作,上报状态到数据面板进行展示。 sidecar模式,精确获取应用的详细信息,不受其他服务影响.

阅读全文

使用plantuml

PlantUML 是一个画图脚本语言,使用代码就可以画出我们想要的流程图 官网 在线编辑 语法 例: @startuml package "clientapp"{ agent "User" } package "Services" { User --> SLB : HTTP GET/POST package "zonea"{ Nginx.A --> [ECS.A] [SLB] --> Nginx.A : internal RPC } package "zoneb"{ Nginx.B --> [ECS.B] [SLB] --> Nginx.B : internal RPC } } Nginx.A --> [ECS.B] Nginx.B --> [ECS.A] database "kv"{ JEDIS - [Redis] [ECS.A] --> JEDIS : get/put [ECS.B] --> JEDIS : get/put } database "RDS" { JDBC - [MySQL] [ECS.

阅读全文

作者的图片

tianpeng du

All in k8s,All in servicemesh

devops

BeiJing