contiv

contiv est une solution de SDN pour conteneurs Docker (compatible avec Swarm et Kubernetes).

Sécurité

  • Contiv permet d’associer des conteneurs à un groupe/réseau
  • Contiv permet d’associer un groupe de conteneurs à des policies

Installation

Tutoriel d’installation : Contiv Installation for Docker Swarm & Kubernetes 1.4+

Boostrap des noeuds :

#!/bin/bash

set -euo pipefail

if [ $EUID -ne 0 ]; then
	echo "Please run this script as root user"
	exit 1
fi

cat <<EOF >/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

setenforce 0

yum install -y ntp
yum install -y docker ebtables \
	https://fedorapeople.org/groups/kolla/kubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm \
	https://fedorapeople.org/groups/kolla/kubectl-1.5.4-0.x86_64.rpm \
	https://fedorapeople.org/groups/kolla/kubelet-1.5.4-0.x86_64.rpm \
	https://fedorapeople.org/groups/kolla/kubernetes-cni-0.3.0.1-0.07a8a2.x86_64.rpm \
	http://cbs.centos.org/kojifiles/packages/openvswitch/2.5.0/2.el7/x86_64/openvswitch-2.5.0-2.el7.x86_64.rpm

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
systemctl enable ntpd && systemctl start ntpd

if systemctl -q is-active firewalld; then
	systemctl stop firewalld
fi
if systemctl -q is-enabled firewalld; then
	systemctl disable firewalld
fi

exit 0

Inialisation du cluster Kubernetes :

kubeadm init --token=1b2f23.aa3109c6d3685a36 --api-advertise-addresses=10.42.0.138 --skip-preflight-checks=true --use-kubernetes-version=v1.4.7 --service-cidr=10.254.0.0/16

Installation de contiv se fait à l’aide du tutoriel.

Création de réseaux/groupes/policies

Création de réseaux VLAN :

netctl network create demo1 -s 10.1.1.0/24 -g 10.1.1.1 --pkt-tag 10 --encap vlan
netctl network create demo2 -s 10.2.2.0/24 -g 10.2.2.1 --pkt-tag 20 --encap vlan

Création de réseaux VXLAN :

netctl network create contivh1    -s 10.233.128.0/18 -g 10.233.128.1 --encap vxlan --nw-type infra
netctl network create default-net -s 10.233.64.0/18  -g 10.233.64.1  --encap vxlan --pkt-tag 10

Le réseau contivh1 est un réseau de type “infra”, ce réseau permet aux hôtes d’accéder au réseau de type “data” qui accueilleront les conteneurs.

Création d’une policy et association à un groupe :

netctl policy create deny-ping
netctl policy rule-add deny-ping 1 -priority=10 -direction=in -protocol=icmp --from-group=group1 -action=allow
netctl policy rule-add deny-ping 9999 -priority=1 -direction=in -action=deny

netctl group create demo1 group1 -policy=deny-ping

Utilisation avec Kubernetes

Exemple de fichier de déploiement avec les labels pour contiv :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment-demo1
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
        io.contiv.network: demo1
        io.contiv.net-group: group1
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80