13、kubernetes之网络插件

时间:2020-02-16 21:58:39   收藏:0   阅读:64

一、基本网络概念

[root@master ~]# cat /etc/cni/net.d/10-flannel.conflist 
{
  "name": "cbr0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

二、Flannel

flannel的三种网络实现方式

1、配置参数

# kubectl get configmap kube-flannel-cfg -n kube-system -o yaml  #获取flannel的配置

2、开启Directrouting功能

# vim net-conf.json 
{
        "Network": "10.244.0.0/16",
        "backend": {
                "Type": "vxlan"
                "Directrouting": true
        }
}
# vim kube-flannel.yml  #flannel编排文件中的配置修改为如上配置
# kubectl apply -f kube-flannel.yml
# ip route show
10.244.0.0/24 via 192.168.100.51 dev eth0   #有如此路由说明修改成功
10.244.2.0/24 via 192.168.100.62 dev eth0 

三、Calico

1、部署canal

使用flannel提供网管理功能,使用calico提供网络策略功能,使用k8s的etcd为calico的元数据库

# curl https://docs.projectcalico.org/manifests/canal.yaml -O
# POD_CIDR="10.244.0.0/16" ;sed -i -e "s?10.244.0.0/16?$POD_CIDR?g" canal.yaml  #修改your-pod-cidr
# kubectl apply -f canal.yaml

2、创建测试规则示例

# kubectl create namespace dev
# kubectl create namespace prod
# vim ingress-def.yaml  #未定义ingress规则则表示拒绝所以入栈
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}  #表示选择所有pod
  policyTypes:
  - Ingress  #表示入栈流量限制,出栈流量不限制
# kubectl apply -f ingress-def.yaml -n dev
# kubectl get netpol -n dev
# vim pod1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: myapp
    image: dongfeimg/myapp:v1
# kubectl apply -f pod1.yaml -n dev
# kubectl apply -f pod1.yaml -n prod
# kubectl get po -n dev -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
pod1   1/1     Running   0          42s   10.244.2.2   node02   <none>           <none>
# kubectl get po -n prod -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
pod1   1/1     Running   0          41s   10.244.1.2   node01   <none>           <none>
访问10.244.2.2无法访问,访问10.244.1.2可以访问,说明规则生效
# vim ingress-def.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}
  ingress:
  - {}  #允许所有入栈流量
  policyTypes:
  - Ingress
# kubectl label pods pod1 app=myapp -n dev
# vim allow-netpol-demo.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-myapp-ingress
spec:
  podSelector:  #选择标签为myapp的pod
    matchLabels:
      app: myapp
  ingress:
  - from:   #定义客户端的ip地址段
    - ipBlock:
        cidr: 10.244.0.0/16
        except:  #在10.244.0.0/16中排除10.244.1.2/32地址
        - 10.244.1.2/32
    ports:  #定义只开放tcp/80
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443

原文:https://www.cnblogs.com/L-dongf/p/12317685.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!