19.网络插件calico
19.网络插件calico
官网: https://docs.projectcalico.org/v3.8/introduction/
calico默认工作在192.168.0.0/16 的网络
calico还不支持ipvs
====
Egres 出站
Ingress 入站
networkpolicy 网络策略,简写 netpol
查看网络策略帮助:
kubectl explain networkpolicy
查看某名称空间的网络策略:
[root@k8s-master networkpoliy]# kubectl get netpol -n dev
NAME POD-SELECTOR AGE
deny-all-ingress 73s
====
calico有多种部署方法,我们这里介绍的是使用flannel和calico混用的方法。这里也比较推荐这种方法。
flannel负责网络部分的功能,而calico我们只使用它的网络策略的功能。
calico部署:
1. 另外单独部署一个etcd
官方文档:
https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/flannel
2. 公用集群的etcd
wget https://docs.projectcalico.org/v3.8/manifests/canal.yaml
kubectl apply -f canal.yaml
[root@k8s-master networkpoliy]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
canal-j9mlh 2/2 Running 0 97m
canal-jgj2j 2/2 Running 0 97m
=====================
calico实例:
[root@k8s-master networkpoliy]# kubectl create namespace dev
namespace/dev created
[root@k8s-master networkpoliy]# kubectl create namespace prod
namespace/prod created
[root@k8s-master networkpoliy]# cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: dev
spec:
podSelector: {} #空表示选择该名称空间的所有pod
policyTypes: #当这里写了Ingress,则Ingress中定义的规则生效,如果规则为空则为全部拒绝。这里没有写Egres,则表示Egres规则不生效,默认全开。
- Ingress
[root@k8s-master networkpoliy]# cat pod-a.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
[root@k8s-master networkpoliy]# kubectl apply -f pod-a.yaml -n dev
pod/pod1 created
[root@k8s-master networkpoliy]# kubectl apply -f pod-a.yaml -n prod
pod/pod1 created
[root@k8s-master networkpoliy]# kubectl get pods -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod1 1/1 Running 0 31s 10.244.1.2 k8s-node1 <none> <none>
[root@k8s-master networkpoliy]# kubectl get pods -n prod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod1 1/1 Running 0 11s 10.244.1.3 k8s-node1 <none> <none>
[root@k8s-master networkpoliy]# curl 10.244.1.2
^C
[root@k8s-master networkpoliy]# curl 10.244.1.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
dev的ns我们应用了策略,所以通过curl请求不到数据,prod的ns中我们没有应用网络策略,所以我们可以通过curl正常请求到。
添加入站规则
ingress:
- {} #这个{}写法表示允许所有的入站,allow all
[root@k8s-master networkpoliy]# cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: dev
spec:
podSelector: {} #空表示选择该名称空间的所有pod
ingress:
- {} #这个{}写法表示允许所有的入站,allow all
policyTypes: #当这里写了Ingress,则Ingress中定义的规则生效,如果规则为空则为全部拒绝。这里没有写Egres,则表示Egres规则不生效,默认全开。
[root@k8s-master networkpoliy]# kubectl apply -f ingress.yaml -n dev
networkpolicy.networking.k8s.io/deny-all-ingress configured
[root@k8s-master networkpoliy]# curl 10.244.1.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
当我们修改策略允许dev上所有可以入站后可以正常请求到10.244.1.2了。
添加一个入站规则,允许10.244.0.0/16这个网段的除了10.244.1.3这个ip,都可以访问pod的80端口,使用podSelector来匹配pod
[root@k8s-master networkpoliy]# cat allow-netpol.demo.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-myapp-ingress
spec:
podSelector:
matchLabels:
app: myapp
ingress:
- from: #这里不写from则允许所有可以访问
- ipBlock:
cidr: 10.244.0.0/16 #指定网段
except:
- 10.244.1.3/32 #除开这个ip
ports:
- protocol: TCP
port: 80
[root@k8s-master networkpoliy]# kubectl apply -f allow-netpol.demo.yaml -n dev
[root@k8s-master networkpoliy]# telnet 10.244.1.2 80
Trying 10.244.1.2...
Connected to 10.244.1.2.
Escape character is '^]'.
在本地测试,可以正常连接
[root@k8s-master networkpoliy]# kubectl exec pod1 -it -n prod -- /bin/sh
/ # telnet 10.244.1.2 80
登录到10.244.1.3这个pod上,则测试telnet 80端口不通,说明策略生效。
添加一个出站策略:
拒绝所有出站策略:
[root@k8s-master networkpoliy]# cat egress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
namespace: prod
spec:
podSelector: {} #空表示选择该名称空间的所有pod
policyTypes: #当这里写了Ingress,则Ingress中定义的规则生效,如果规则为空则为全部拒绝。这里没有写Egres,则表示Egres规则不生效,默认全开。
- Egress
[root@k8s-master networkpoliy]# kubectl apply -f egress.yaml -n prod
[root@k8s-master networkpoliy]# kubectl exec pod1 -it -n prod -- /bin/sh
/ # ping 10.250.0.89
PING 10.250.0.89 (10.250.0.89): 56 data bytes
ping k8s-master上的kube-scheduler-k8s-master 的ip发现ping不通,策略生效。
允许所有出去的策略:
[root@k8s-master networkpoliy]# cat egress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
namespace: prod
spec:
podSelector: {} #空表示选择该名称空间的所有pod
egress:
- {}
policyTypes: #当这里写了Ingress,则Ingress中定义的规则生效,如果规则为空则为全部拒绝。这里没有写Egres,则表示Egres规则不生效,默认全开。
- Egress
[root@k8s-master networkpoliy]# kubectl apply -f egress.yaml -n prod
networkpolicy.networking.k8s.io/deny-all-egress configured
[root@k8s-master networkpoliy]# kubectl exec pod1 -it -n prod -- /bin/sh
/ # ping 10.250.0.89
PING 10.250.0.89 (10.250.0.89): 56 data bytes
64 bytes from 10.250.0.89: seq=119 ttl=63 time=0.384 ms
64 bytes from 10.250.0.89: seq=120 ttl=63 time=0.505 ms
64 bytes from 10.250.0.89: seq=121 ttl=63 time=0.373 ms
64 bytes from 10.250.0.89: seq=122 ttl=63 time=0.360 ms
64 bytes from 10.250.0.89: seq=123 ttl=63 time=0.504 ms
ping通了,策略生效。
一般对于网络策略设置的规范:
对于网络策略来讲:
名称空间:
拒绝所有出站,入站规则
方形所有出站目标名称空间内的所有Pod
19.网络插件calico的更多相关文章
- k8s西游记 - 切换网络插件IP池
前言 最近在另一个k8s集群中,搭建了kong网关,在配置OIDC插件时,希望使用Memcahe代替Cookie来存储会话信息,于是把部署在同一局域网Memcahe的内网IP,比如:192.168.1 ...
- Flannel和Calico网络插件工作流程对比
Flannel和Calico网络插件对比 Calico简介 Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gw Calico方便集成 OpenStac ...
- Flannel和Calico网络插件对比
1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...
- Calico网络插件
以下大部分是本人参考各种资料{官方文档.书籍}对知识的汇总和整理,其中有理解错误的地方请大神留言和指正,嘿嘿~~ 1.概述 参考文档:https://projectcalico.docs.tigera ...
- K8S Calico网络插件
0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...
- k8s更换网络插件:从flannel更换成calico
卸载flannel 查看已安装的flannel的信息 # 查看CNI插件,可以得知使用的是flannel # cat /etc/cni/net.d/10-flannel.conflist { &quo ...
- Docker网络解决方案 - Calico部署记录
简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...
- 使用kubeadm安装kubernetes/部署前准备/flannel网络插件/镜像下载/
本文内容参考<kuberneters进阶实战>/马哥的新书/推荐 部署前的准备 主机名称解析 分布式系统环境中的多主机通信通常基于主机名称进行,这在IP地址存在变化的可能性时为主机提供了固 ...
- k8s的flannel网络插件配置
flannel的网络插件配置 Kubernetes网络通信需要解决以下问题: (1)容器间通信:同一个Pod内的多个容器间的通信,lo (2)Pod通信:P ...
随机推荐
- Mysql高可用集群-解决MMM单点故障
目录 一.理论概述 组件介绍 三.部署 四.测试 五.总结 preface: MMM架构相比于MHA来说各方面都逊色不少,写这篇案例也算是整理下思路吧. 一.理论概述 MMM(Master-Maste ...
- Elasticsearch 9300无法访问,客户端出现NoNodeAvailableException[None of the configured nodes are available: [{#transport#‐1}{exvgJLR‐RlCNMJy‐hzKtnA}
1. 进入容器 docker exec ‐it ID /bin/bash 2. 拷贝配置文件到宿主机 docker cp ID:/usr/share/elasticsearch/config/el ...
- 通用mapper的增删改查方法 留存 备忘
Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQ ...
- U盘装manjaro 18报Python error in job “initcpio”
更新: 还是不行,大家再找别的方法. 以下内容仅做参考,意义不大. U盘安装 用rufus做U盘,写入选DD模式,比ISO模式可靠点. 错误解决 报错信息: Error installing Manj ...
- NLP学习(3)---Bert模型
一.BERT模型: 前提:Seq2Seq模型 前提:transformer模型 bert实战教程1 使用BERT生成句向量,BERT做文本分类.文本相似度计算 bert中文分类实践 用bert做中文命 ...
- 剑指Offer的学习笔记(C#篇)-- 翻转单词的序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student ...
- python_面向对象——对象间的组合关系
# 由一堆组件构成一个完整的实体,组建本身独立,但又不能自己运行,必须跟宿主组合在一起,运行. class Dog: #狗 def __init__(self,name,dog_type,attack ...
- JQuery中 text()、html() 以及 val()以及innerText、innerHTML和value
设置内容 - text().html() 以及 val() 我们将使用前一章中的三个相同的方法来设置内容: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容( ...
- [JSOI2018]潜入行动 (树形背包)
题目链接 题意: 外星人的母舰可以看成是一棵 n 个节点. n−1 条边的无向树,树上的节点用 1,2,⋯,n 编号.JYY 的特工已经装备了隐形模块,可以在外星人母舰中不受限制地活动,可以神不知鬼不 ...
- mysql查看查询缓存是否启用
查看查询缓存情况: mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +---------- ...