设为首页 收藏本站
查看: 1042|回复: 0

[经验分享] weave-npc 介绍(适配k8s v1.6)

[复制链接]
发表于 2018-1-6 08:53:42 | 显示全部楼层 |阅读模式
func root(cmd *cobra.Command, args []string) {  
common.SetLogLevel(logLevel)
  
//用于标识主机,产生本地的规则
  
if nodeName == "" {
  
// HOSTNAME is set by Kubernetes for pods in the host network namespace
  
nodeName = os.Getenv("HOSTNAME")
  
}
  
if nodeName == "" {
  
common.Log.Fatalf("Must set node name via --node-name or $HOSTNAME")
  
}
  
common.Log.Infof("Starting Weaveworks NPC %s; node name %q", version, nodeName)
  

  

  
if err := metrics.Start(metricsAddr); err != nil {
  
common.Log.Fatalf("Failed to start metrics: %v", err)
  
}
  

  
if err := ulogd.Start(); err != nil {
  
common.Log.Fatalf("Failed to start ulogd: %v", err)
  
}
  

  
config, err := rest.InClusterConfig()
  
handleError(err)
  

  
client, err := kubernetes.NewForConfig(config)
  
handleError(err)
  
// 创建iptables 对象,用于管理iptables规则及生效
  
ipt, err := iptables.New()
  
handleError(err)
  
// 创建ipeset对象,用于管理ipset资源
  
ips := ipset.New(common.LogLogger())
  
// resetIPTables在filter表添加WEAVE-NPC-INGRESS链、WEAVE-NPC-DEFAULT链、
  
// WEAVE-NPC链,若已经存在则置空(FLUSH)
  
handleError(resetIPTables(ipt))
  
// resetIPSets 将weave-npc创建的ipset,即名字为”weave-“开头的ipset的成员删除
  
handleError(resetIPSets(ips))
  
// createBaseRules初始化iptables规则
  
// weave-npc链中添加iptables规则

  
// -A WEAVE-NPC -m state --state>  
// -A WEAVE-NPC -d 224.0.0.0/4 -j ACCEPT
  
// -A WEAVE-NPC -m state --state NEW -j WEAVE-NPC-DEFAULT
  
// -A WEAVE-NPC -m state --state NEW -j WEAVE-NPC-INGRESS
  
// -A WEAVE-NPC -m set ! --match-set weave-local-pods dst -j ACCEPT
  
handleError(createBaseRules(ipt, ips))
  

  
npc := npc.New(nodeName, ipt, ips)
  
// 下面起了三个controller,利用client-go的informer来分别负责namespaces、pods和
  
// networkpolicies的创改删处理
  
nsController := makeController(client.Core().RESTClient(), "namespaces", &coreapi.Namespace{},
  
cache.ResourceEventHandlerFuncs{
  
AddFunc: func(obj interface{}) {
  
handleError(npc.AddNamespace(obj.(*coreapi.Namespace)))
  
},
  
DeleteFunc: func(obj interface{}) {
  
switch obj := obj.(type) {
  
case *coreapi.Namespace:
  
handleError(npc.DeleteNamespace(obj))
  
case cache.DeletedFinalStateUnknown:
  
// We know this object has gone away, but its final state is no longer
  
// available from the API server. Instead we use the last copy of it
  
// that we have, which is good enough for our cleanup.
  
handleError(npc.DeleteNamespace(obj.Obj.(*coreapi.Namespace)))
  
}
  
},
  
UpdateFunc: func(old, new interface{}) {
  
handleError(npc.UpdateNamespace(old.(*coreapi.Namespace), new.(*coreapi.Namespace)))
  
}})
  

  
podController := makeController(client.Core().RESTClient(), "pods", &coreapi.Pod{},
  
cache.ResourceEventHandlerFuncs{
  
AddFunc: func(obj interface{}) {
  
handleError(npc.AddPod(obj.(*coreapi.Pod)))
  
},
  
DeleteFunc: func(obj interface{}) {
  
switch obj := obj.(type) {
  
case *coreapi.Pod:
  
handleError(npc.DeletePod(obj))
  
case cache.DeletedFinalStateUnknown:
  
// We know this object has gone away, but its final state is no longer
  
// available from the API server. Instead we use the last copy of it
  
// that we have, which is good enough for our cleanup.
  
handleError(npc.DeletePod(obj.Obj.(*coreapi.Pod)))
  
}
  
},
  
UpdateFunc: func(old, new interface{}) {
  
handleError(npc.UpdatePod(old.(*coreapi.Pod), new.(*coreapi.Pod)))
  
}})
  

  
npController := makeController(client.Extensions().RESTClient(), "networkpolicies", &extnapi.NetworkPolicy{},
  
cache.ResourceEventHandlerFuncs{
  
AddFunc: func(obj interface{}) {
  
handleError(npc.AddNetworkPolicy(obj.(*extnapi.NetworkPolicy)))
  
},
  
DeleteFunc: func(obj interface{}) {
  
switch obj := obj.(type) {
  
case *extnapi.NetworkPolicy:
  
handleError(npc.DeleteNetworkPolicy(obj))
  
case cache.DeletedFinalStateUnknown:
  
// We know this object has gone away, but its final state is no longer
  
// available from the API server. Instead we use the last copy of it
  
// that we have, which is good enough for our cleanup.
  
handleError(npc.DeleteNetworkPolicy(obj.Obj.(*extnapi.NetworkPolicy)))
  
}
  
},
  
UpdateFunc: func(old, new interface{}) {
  
handleError(npc.UpdateNetworkPolicy(old.(*extnapi.NetworkPolicy), new.(*extnapi.NetworkPolicy)))
  
}})
  

  
go nsController.Run(wait.NeverStop)
  
go podController.Run(wait.NeverStop)
  
go npController.Run(wait.NeverStop)
  

  
signals := make(chan os.Signal, 1)
  
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
  
common.Log.Fatalf("Exiting: %v", <-signals)
  
}
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432126-1-1.html 上篇帖子: 使用kubeadm安装k8s集群故障处理三则 下篇帖子: k8s的port、targetport、nodeport之间的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表