当前位置: 首页 > 编程日记 > 正文

k8s使用kube-router网络插件并监控流量状态

简介

kube-router是一个新的k8s的网络插件,使用lvs做服务的代理及负 载均衡,使用iptables来做网络的隔离策略。部署简单,只需要在每个节点部署一个daemonset即可,高性能,易维护。支持pod间通信,以及服务的代理。

安装

# 本次实验重新创建了集群,使用之前测试其他网络插件的集群环境没有成功 # 可能是由于环境干扰,实验时需要注意 # 创建kube-router目录下载相关文件
mkdir kube-router && cd kube-router
wget https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
wget https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter-all-features.yaml# 以下两种部署方式任选其一 # 1. 只启用 pod网络通信,网络隔离策略 功能
kubectl apply -f kubeadm-kuberouter.yaml# 2. 启用 pod网络通信,网络隔离策略,服务代理 所有功能 # 删除kube-proxy和其之前配置的服务代理
kubectl apply -f kubeadm-kuberouter-all-features.yaml
kubectl -n kube-system delete ds kube-proxy# 在每个节点上执行
docker run --privileged --net=host registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.10.2 kube-proxy --cleanup# 查看
kubectl get pods --namespace kube-system
kubectl get svc --namespace kube-system
复制代码

测试

# 启动用于测试的deployment
kubectl run nginx --replicas=2 --image=nginx:alpine --port=80
kubectl expose deployment nginx --type=NodePort --name=example-service-nodeport
kubectl expose deployment nginx --name=example-service# dns及访问测试
kubectl run curl --image=radial/busyboxplus:curl -i --tty
nslookup kubernetes
nslookup example-service
curl example-service# 清理
kubectl delete svc example-service example-service-nodeport
kubectl delete deploy nginx curl
复制代码

监控相关数据并可视化

重新部署kube-router

# 修改yml文件
cp kubeadm-kuberouter-all-features.yaml kubeadm-kuberouter-all-features.yaml.ori
vim kubeadm-kuberouter-all-features.yaml
...
spec:template:metadata:labels:k8s-app: kube-routertier: nodeannotations:scheduler.alpha.kubernetes.io/critical-pod: '' # 添加如下参数,让prometheus收集数据prometheus.io/scrape: "true"prometheus.io/path: "/metrics"prometheus.io/port: "8080"spec:serviceAccountName: kube-routerserviceAccount: kube-routercontainers:- name: kube-routerimage: cloudnativelabs/kube-routerimagePullPolicy: Alwaysargs:# 添加如下参数开启metrics- --metrics-path=/metrics- --metrics-port=8080- --run-router=true- --run-firewall=true- --run-service-proxy=true- --kubeconfig=/var/lib/kube-router/kubeconfig
...# 重新部署
kubectl delete ds kube-router -n kube-system
kubectl apply -f kubeadm-kuberouter-all-features.yaml# 测试获取metrics
curl http://127.0.0.1:8080/metrics
复制代码

部署prometheus

复制如下内容到prometheus.yml文件

--- apiVersion: v1 kind: ConfigMap metadata:  name: prometheus  namespace: kube-system data: prometheus.yml: |-  global:  scrape_interval: 15s  scrape_configs: # scrape config for API servers  - job_name: 'kubernetes-apiservers'  kubernetes_sd_configs:  - role: endpoints  scheme: https  tls_config:  ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  relabel_configs:  - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]  action: keep  regex: default;kubernetes;https # scrape config for nodes (kubelet)  - job_name: 'kubernetes-nodes'  scheme: https  tls_config:  ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  kubernetes_sd_configs:  - role: node  relabel_configs:  - action: labelmap  regex: __meta_kubernetes_node_label_(.+)  - target_label: __address__  replacement: kubernetes.default.svc:443  - source_labels: [__meta_kubernetes_node_name]  regex: (.+)  target_label: __metrics_path__  replacement: /api/v1/nodes/${1}/proxy/metrics # Scrape config for Kubelet cAdvisor. # # This is required for Kubernetes 1.7.3 and later, where cAdvisor metrics # (those whose names begin with 'container_') have been removed from the # Kubelet metrics endpoint. This job scrapes the cAdvisor endpoint to # retrieve those metrics. # # In Kubernetes 1.7.0-1.7.2, these metrics are only exposed on the cAdvisor # HTTP endpoint; use "replacement: /api/v1/nodes/${1}:4194/proxy/metrics" # in that case (and ensure cAdvisor's HTTP server hasn't been disabled with # the --cadvisor-port=0 Kubelet flag). # # This job is not necessary and should be removed in Kubernetes 1.6 and # earlier versions, or it will cause the metrics to be scraped twice.  - job_name: 'kubernetes-cadvisor'  scheme: https  tls_config:  ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  kubernetes_sd_configs:  - role: node  relabel_configs:  - action: labelmap  regex: __meta_kubernetes_node_label_(.+)  - target_label: __address__  replacement: kubernetes.default.svc:443  - source_labels: [__meta_kubernetes_node_name]  regex: (.+)  target_label: __metrics_path__  replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor # scrape config for service endpoints.  - job_name: 'kubernetes-service-endpoints'  kubernetes_sd_configs:  - role: endpoints  relabel_configs:  - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]  action: keep  regex: true  - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]  action: replace  target_label: __scheme__  regex: (https?)  - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]  action: replace  target_label: __metrics_path__  regex: (.+)  - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]  action: replace  target_label: __address__  regex: ([^:]+)(?::\d+)?;(\d+)  replacement: $1:$2  - action: labelmap  regex: __meta_kubernetes_service_label_(.+)  - source_labels: [__meta_kubernetes_namespace]  action: replace  target_label: kubernetes_namespace  - source_labels: [__meta_kubernetes_service_name]  action: replace  target_label: kubernetes_name # Example scrape config for pods  - job_name: 'kubernetes-pods'  kubernetes_sd_configs:  - role: pod  relabel_configs:  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]  action: keep  regex: true  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]  action: replace  target_label: __metrics_path__  regex: (.+)  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]  action: replace  regex: ([^:]+)(?::\d+)?;(\d+)  replacement: $1:$2  target_label: __address__  - action: labelmap  regex: __meta_kubernetes_pod_label_(.+)  - source_labels: [__meta_kubernetes_namespace]  action: replace  target_label: namespace  - source_labels: [__meta_kubernetes_pod_name]  action: replace  target_label: pod_name --- apiVersion: v1 kind: Service metadata:  annotations: prometheus.io/scrape: 'true'  labels:  name: prometheus  name: prometheus  namespace: kube-system spec:  selector:  app: prometheus  type: NodePort  ports:  - name: prometheus  protocol: TCP  port: 9090 --- apiVersion: extensions/v1beta1 kind: Deployment metadata:  name: prometheus  namespace: kube-system spec:  replicas: 1  selector:  matchLabels:  app: prometheus  template:  metadata:  name: prometheus  labels:  app: prometheus  annotations: sidecar.istio.io/inject: "false"  spec:  serviceAccountName: prometheus  containers:  - name: prometheus  image: docker.io/prom/prometheus:v2.2.1  imagePullPolicy: IfNotPresent  args:  - '--storage.tsdb.retention=6h'  - '--config.file=/etc/prometheus/prometheus.yml'  ports:  - name: web  containerPort: 9090  volumeMounts:  - name: config-volume  mountPath: /etc/prometheus  volumes:  - name: config-volume  configMap:  name: prometheus --- apiVersion: v1 kind: ServiceAccount metadata:  name: prometheus  namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata:  name: prometheus rules: - apiGroups: [""]  resources:  - nodes  - services  - endpoints  - pods  - nodes/proxy  verbs: ["get", "list", "watch"] - apiGroups: [""]  resources:  - configmaps  verbs: ["get"] - nonResourceURLs: ["/metrics"]  verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata:  name: prometheus roleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: prometheus subjects: - kind: ServiceAccount  name: prometheus  namespace: kube-system --- 复制代码

部署测试

# 部署
kubectl apply -f prometheus.yml# 查看
kubectl get pods --namespace kube-system
kubectl get svc --namespace kube-system# 访问prometheus # 输入 kube_router 关键字查找 看有无提示出现
prometheusNodePort=$(kubectl get svc -n kube-system | grep prometheus | awk '{print $5}' | cut -d '/' -f 1 | cut -d ':' -f 2)
nodeName=$(kubectl get no | grep '<none>' | head -1 | awk '{print $1}')
nodeIP=$(ping -c 1 $nodeName | grep PING | awk '{print $3}' | tr -d '()')
echo "http://$nodeIP:"$prometheusNodePort 复制代码

部署grafana

复制如下内容到grafana.yml文件

--- apiVersion: v1 kind: Service metadata:  name: grafana  namespace: kube-system spec:  type: NodePort  ports:  - port: 3000  protocol: TCP  name: http  selector:  app: grafana --- apiVersion: extensions/v1beta1 kind: Deployment metadata:  name: grafana  namespace: kube-system spec:  replicas: 1  template:  metadata:  labels:  app: grafana  spec:  serviceAccountName: grafana  containers:  - name: grafana  image: grafana/grafana  imagePullPolicy: IfNotPresent  ports:  - containerPort: 3000  volumeMounts:  - mountPath: /var/lib/grafana  name: grafana-data  volumes:  - name: grafana-data  emptyDir: {} --- apiVersion: v1 kind: ServiceAccount metadata:  name: grafana  namespace: kube-system --- 复制代码

部署测试

# 部署
kubectl apply -f grafana.yml# 查看
kubectl get pods --namespace kube-system
kubectl get svc --namespace kube-system# 访问grafana
grafanaNodePort=$(kubectl get svc -n kube-system | grep grafana | awk '{print $5}' | cut -d '/' -f 1 | cut -d ':' -f 2)
nodeName=$(kubectl get no | grep '<none>' | head -1 | awk '{print $1}')
nodeIP=$(ping -c 1 $nodeName | grep PING | awk '{print $3}' | tr -d '()')
echo "http://$nodeIP:"$grafanaNodePort # 默认用户密码
admin/admin
复制代码

导入并查看dashboard

# 下载官方dashboard的json文件
wget https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/dashboard/kube-router.json
复制代码

创建名为Prometheus类型也为Prometheus的数据源,连接地址为http://prometheus:9090/

选择刚刚下载的json文件导入dashboard

查看dashboard

1
本文转自掘金-k8s使用kube-router网络插件并监控流量状态

相关文章:

作业盒子完成1.5亿美元D轮融资,更名“小盒科技”

作者 | 夕颜 导读&#xff1a;2019 年 7 月 18 日&#xff0c;AI 在线教育创企“作业盒子”召开发布会&#xff0c;宣布已于今年 5 月完成 1.5 亿美元 D 轮融资&#xff0c;由阿里巴巴领投。同时&#xff0c;“作业盒子”宣布进行品牌升级&#xff0c;正式更名为“小盒科技”&a…

8500WN流畅高速上网高端卡 12核心不锁倍频

据台湾媒体最新报道&#xff0c;台湾无线网卡厂商最新推出一款大功率80DBI无线网卡-横空出世8500WN集成机。售价约1180新台币(折合人民币约298元) 台湾卡王是全球著名的大功率无线网卡生产厂商&#xff0c;2007年曾最早推出大功率无线网卡8G&#xff0c;以其卓越的品质&#xf…

Fiddler抓包工具总结(转)

序章 Fiddler是一个蛮好用的抓包工具&#xff0c;可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。反正好处多多&#xff0c;举之不尽呀&#xff01;当年学习的时候也蛮费劲&#xff0c;一些蛮实用隐藏的小功能用了之后就忘记了&a…

Windows 64位机上C/C++代码静态检查工具Logiscope RuleChecker的安装和使用

1、 从http://download.csdn.net/detail/zmywly/3611820 和 http://download.csdn.net/detail/zmywly/3611854下载破解版&#xff1b; 2、 将文件解压缩到D:\soft\logiScope文件夹下&#xff0c;会生成一个logiScope[6.1.30]文件夹&#xff1b; 3、 双击D:\soft\lo…

作业盒子完成1.5亿美元D轮融资,用AI普及教育资源

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;2019 年 7 月 18 日&#xff0c;AI 在线教育创企“作业盒子”召开发布会&#xff0c;宣布已于今年 5 月完成 1.5 亿美元 D 轮融资&#xff0c;由阿里巴巴领投。同时&#xff0c;“作业盒子…

迭代器接口IteratorAggregate 与类 ArrayIterator(转)

也许你很想使用foreach来遍历一个类中的属性&#xff0c;然而你却没有很好的方式来这么做。可能使用PHP中class的操作的方式能够帮助你实现一些&#xff0c;但是现在我想你有了更好的方式。通过继承接口&#xff1a;IteratorAggregate来实现。 示例 [php] view plaincopy <?…

整理《Mastering OpenCV with Practical Computer Vision Projects》中第8章用Eigenfaces或Fisherfaces进行人脸识别操作流程

These generally involve four main steps&#xff1a;(1)、Face detection&#xff1b;(2)、Face preprocessing&#xff1b;(3)、Collect and learn faces&#xff1b;(4)、Face recognition. 一、Face detection(Haar-based、LBP-based) LBP-based detectors are potential…

性能比GPU高100倍!华人教授研发全球首个可编程忆阻器AI计算机

译者 | 陆离责编 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;密歇根大学研发成功第一台可编程的忆阻器计算机&#xff0c;它不仅是一个通过外部计算机运行的忆阻器阵列&#xff0c;而且还是可以在智能手机等小型设备上进行…

深入解析redis cluster gossip机制

社区版redis cluster是一个P2P无中心节点的集群架构&#xff0c;依靠gossip协议传播协同自动化修复集群的状态。本文将深入redis cluster gossip协议的细节&#xff0c;剖析redis cluster gossip协议机制如何运转。协议解析 cluster gossip协议定义在在ClusterMsg这个结构中&am…

Python 3.8即将发布,这几个变化你必须知道

作者 | Jake Edge译者 | Rachel出品 | Python大本营&#xff08;ID:pythonnews&#xff09;【导读】近日&#xff0c; Python 3.8.0b1 版本和 beta 版相继发布&#xff0c; Python 3.8 版的新特征已经基本成型。尽管最终版本的官方发布时间为 10 月&#xff0c;但实际上&#x…

Ubuntu 12.10 拨号上网及停用方法

2019独角兽企业重金招聘Python工程师标准>>> 本人电脑在设置了拨号上网过后&#xff0c;本来原先插上网线就能上网&#xff0c;现在反而不能上了&#xff0c;在网上找了些办法&#xff0c;再进行了些修改&#xff0c;最后成功了&#xff0c;现在把我的方法给大家分享…

011:视图函数介绍

视图&#xff1a; 视图一般都写在 app 的 views.py 中。并且视图的第一个参数永远都是 request &#xff08;一个HttpRequest&#xff09;对象。这个对象存储了请求过来的所有信息&#xff0c;包括携带的参数以及一些头部信息等。在视图中&#xff0c;一般是完成逻辑相关的操作…

Windows XP下vs2010中配置OpenCV2.4.3

1、 从http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/下载OpenCV2.4.3&#xff1b; 2、 将OpenCV-2.4.3.exe放到D:\Soft\OpenCV2.4.3文件夹下&#xff0c;解压到当前文件夹下&#xff0c;生成一个opencv文件夹&#xff1b; 3、 下载并安装CMake&…

改变shell read命令的隔符

2019独角兽企业重金招聘Python工程师标准>>> orgIFSIFS IFS"." ls */.fst/.txt | while read var1 var2 var3 do IFS$orgIFS fstcompile --isymbols${path1}isymtab.txt --osymbols${path1}osymtab.txt ${var1}/.fst/.txt ${var1}/.fst fstdraw --isymbol…

AutoML前沿技术与实践经验分享 | 免费报名

传统机器学习的解决范式可表示为&#xff1a;ML Solution ML expertise Computation Data新机器学习范式可表示为&#xff1a;New ML Solution 100x Computation 100x Data通过表示的变化&#xff0c;可以看出&#xff0c;传统范式的“ML expertise”被“100x”的“Comput…

传承乡邦文化,展示国学之美,联墨香飘远,文明花放红;

2019独角兽企业重金招聘Python工程师标准>>> 12月16日上午&#xff0c;阳光普照&#xff0c;翰墨飘香。由揭阳市文联指导、揭阳市楹联学会主办、榕城区图书馆协办的“我们的美好生活”原创联墨作品展在榕城区图书馆隆重开幕。 此次活动意在传承乡邦文化&#xff0c;…

VS2010运行速度优化汇总

1、 工具-->选项-->环境&#xff1a;视觉体验&#xff0c;前对勾全去掉&#xff1b; 2、 工具-->选项-->环境-->启动&#xff1a;启动时(P)下拉列表框中选择&#xff1a;显示空环境&#xff1b; 3、 工具-->选项-->文本编辑器-->C/C-->高级&am…

(一)JDBC入门及简介

引用百度对JDBC的解释&#xff1a; JDBC&#xff08;Java Data Base Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供…

OpenCV中OpenCL模块函数

It currently develop and test on GPU devices only. This includes both discrete GPUs(NVidia,AMD), as well as integrated chips(AMD APU and intel HD devices). The ocl module can be found under the “modules”directory. In “modules/ocl/src” you can find the…

这位创造GitHub冠军项目的“老男人”,堪称10倍程序员本尊

作者 | 马超&#xff0c;CSDN博客专家&#xff0c;金融科技从业者来源 | CSDN博客7月12日一款叫做TDengine的时序数据库项目在GitHub上开源了&#xff0c;这个项目一经发布就稳稳占据了GitHub排行榜的C位&#xff0c;目前TdEngine已经累积了5000多个star,并且连续一周排在上升榜…

hdu 1724 Ellipse——辛普森积分

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1724 #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define db double using namespace std; const db eps1e-5; int T;db a,b,l,r; db f(db x){return sqrt(…

模仿Hibernate的逆向工程_java版_源码下载

在这篇blog&#xff1a;"Hibernate逆向工程原理_java版本"中谈到了Hibernate逆向工程原理。 我喜欢理论和实践相结合....so,今天我试着模仿hibernate的逆向工程&#xff0c;哈哈&#xff0c;我成功啦.... 话不多说....直接上图先&#xff1a; 项目结构&#xff1a; 运…

http协议进阶(三)http报文

一、报文流 http报文是在http应用程序之间发送的数据块&#xff08;也可称为数据包&#xff09;、这些数据块以一些文本的元信息&#xff08;meta-information&#xff09;开头&#xff0c;描述了报文的内容及含义&#xff0c;后面跟着 可选的数据部分&#xff0c;这些报文在客…

一行Python代码能实现什么丧心病狂的功能?

作者 | 天元浪子来源 | CSDN博客手头有 109 张头部 CT 的断层扫描图片&#xff0c;我打算用这些图片尝试头部的三维重建。基础工作之一&#xff0c;就是要把这些图片数据读出来&#xff0c;组织成一个三维的数据结构&#xff08;实际上是四维的&#xff0c;因为每个像素有 RGB…

Windows7 32位机上,OpenCV中配置GPU操作步骤

1、 查看本机配置&#xff0c;查看显卡类型是否支持NVIDIA GPU&#xff0c;本机显卡为NVIDIA GeForce 8400 GS&#xff1b; 2、 从http://www.nvidia.cn/Download/index.aspx?langcn下载最新驱动并安装&#xff1b; 3、 从https://developer.nvidia.com/cuda-toolkit根据…

【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

这是我悲惨的接近爆零的一次考试&#xff0c;但是本蒟蒻不能放弃&#xff0c;还是要总结的QAQ 答题卡 【题目背景】 八月是个悲惨的月份。先不谈炎热的天气&#xff0c;对于新生来说&#xff0c;八月意味着军训&#xff1b; 而对于高二高三的同学来说&#xff0c;八月意味着开学…

RememberMe 功能的实现(base-auth使用说明)

2019独角兽企业重金招聘Python工程师标准>>> 日常记录&#xff0c;代码是根据SpringSecurity写的。 ###写个Entity类实现UserDetails <!-- lang: java --> package com.lqz.b2c.base.web.controller.member.support;import com.lqz.b2c.base.entity.Passport;…

AutoML前沿技术与实践经验分享 | 免费公开课

传统机器学习的解决范式可表示为&#xff1a;ML Solution ML expertise Computation Data新机器学习范式可表示为&#xff1a;New ML Solution 100x Computation 100x Data通过表示的变化&#xff0c;可以看出&#xff0c;传统范式的“ML expertise”被“100x”的“Comput…

Windows 7 64位机上搭建Android开发环境

1、从http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载Java JDK&#xff0c;根据机子本身配置&#xff0c;选择jdk-7u25-windows-x64.exe下载&#xff0c;将其安装到D:\ProgramFiles\Java\jdk1.7.0_25文件夹下&#xff0c;并将D:\Pro…

近4万Star,登月源码登顶GitHub,这位女程序员“拯救”了阿波罗

作者 | 伍杏玲转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;1969 年 7 月 20 日&#xff0c;“阿波罗 11 号”飞船登月&#xff0c;宇航员尼尔阿姆斯特朗&#xff08;Neil Armstrong&#xff09;成功踏上月球表面&#xff0c;标志着人类第一次踏上月球&#xff0c…