From d3356513e3125ec989495cc134eb5d56e2025b5a Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Fri, 11 Aug 2017 15:36:46 +0530 Subject: [PATCH] use kube-router as kube-proxy replacement Fixes #118 --- Documentation/README.md | 3 + Documentation/kubeadm.md | 25 ++- .../kubeadm-kuberouter-all-features.yaml | 168 ++++++++++++++++++ 3 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 daemonset/kubeadm-kuberouter-all-features.yaml diff --git a/Documentation/README.md b/Documentation/README.md index 003bea0e57..5617d08a52 100644 --- a/Documentation/README.md +++ b/Documentation/README.md @@ -60,6 +60,9 @@ Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/maste #### bootkube Please see the [steps](https://github.com/cloudnativelabs/kube-router/tree/master/contrib/bootkube) to deploy Kubernetes cluster with Kube-router using [bootkube](https://github.com/kubernetes-incubator/bootkube) +#### kubeadm +Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/Documentation/kubeadm.md) to deploy Kubernetes cluster with Kube-router using [Kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/) + ### deployment Depending on what functionality of kube-router you want to use, multiple deployment options are possible. You can use the flags `--run-firewall`, `--run-router`, `--run-service-proxy` to selectively enable only required functionality of kube-router. diff --git a/Documentation/kubeadm.md b/Documentation/kubeadm.md index 25e0991258..739d3da402 100644 --- a/Documentation/kubeadm.md +++ b/Documentation/kubeadm.md @@ -2,10 +2,31 @@ Please follow the [steps](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/) to install Kubernetes cluster with Kubeadm. -Kube-router relies on kube-controll-manager to allocate pod CIDR for the nodes. So you must use `kubeadm init` with `--pod-network-cidr` flag. +Kube-router relies on kube-controll-manager to allocate pod CIDR for the nodes. So you must use `kubeadm init` with `--pod-network-cidr` flag. On the controller node after `kubeadm init` is complete: + +Kube-router provides pod networking, network policy and high perfoming IPVS/LVS based service proxy. Depending on you choose to use kube-router for service proxy you have two options. + +## kube-router providing pod networking and network policy For the step #3 **Installing a pod network** install a kube-router pod network and network policy add-on with the following command: -``` +```sh kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml ``` + +## kube-router providing service proxy, firewall and pod networking. + +For the step #3 **Installing a pod network** install a kube-router pod network and network policy add-on with the following command: + +```sh +KUBECONFIG=/etc/kubernetes/admin.conf kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter-all-features.yaml +``` + +Now since kube-router provides service proxy as well. Run below commands to remove kube-proxy and cleanup any iptables configuratin it may have done. + +```sh +KUBECONFIG=/etc/kubernetes/admin.conf kubectl -n kube-system delete ds kube-proxy +docker run --privileged --net=host gcr.io/google_containers/kube-proxy-amd64:v1.7.3 kube-proxy --cleanup-iptables +``` + + diff --git a/daemonset/kubeadm-kuberouter-all-features.yaml b/daemonset/kubeadm-kuberouter-all-features.yaml new file mode 100644 index 0000000000..1ab1c0467d --- /dev/null +++ b/daemonset/kubeadm-kuberouter-all-features.yaml @@ -0,0 +1,168 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: kube-router-cfg + namespace: kube-system + labels: + tier: node + k8s-app: kube-router +data: + cni-conf.json: | + { + "name":"kubernetes", + "type":"bridge", + "bridge":"kube-bridge", + "isDefaultGateway":true, + "ipam": { + "type":"host-local" + } + } +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + labels: + k8s-app: kube-router + tier: node + name: kube-router + namespace: kube-system +spec: + template: + metadata: + labels: + k8s-app: kube-router + tier: node + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + pod.beta.kubernetes.io/init-containers: '[ + { + "name": "install-cni", + "image": "busybox", + "command": [ "/bin/sh", "-c", "set -e -x; if [ ! -f /etc/cni/net.d/10-kuberouter.conf ]; then TMP=/etc/cni/net.d/.tmp-kuberouter-cfg; cp /etc/kube-router/cni-conf.json ${TMP}; mv ${TMP} /etc/cni/net.d/10-kuberouter.conf; fi" ], + "volumeMounts": [ + { + "name": "cni", + "mountPath": "/etc/cni/net.d" + }, + { + "name": "kube-router-cfg", + "mountPath": "/etc/kube-router" + } + ], + "volumes": { + "name": "cni", + "hostPath": { + "path": "/etc/cni/net.d" + } + } + } + ]' + spec: + serviceAccountName: kube-router + serviceAccount: kube-router + containers: + - name: kube-router + image: cloudnativelabs/kube-router-git + imagePullPolicy: Always + args: + - --run-router=true + - --run-firewall=true + - --run-service-proxy=true + - --kubeconfig=/var/lib/kube-router/kubeconfig + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + resources: + requests: + cpu: 250m + memory: 250Mi + securityContext: + privileged: true + volumeMounts: + - name: lib-modules + mountPath: /lib/modules + readOnly: true + - name: cni + mountPath: /etc/cni/net.d + - name: kubeconfig + mountPath: /var/lib/kube-router + readOnly: true + hostNetwork: true + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists + volumes: + - hostPath: + path: /lib/modules + name: lib-modules + - hostPath: + path: /etc/cni/net.d + name: cni + - name: kubeconfig + configMap: + name: kube-proxy + items: + - key: kubeconfig.conf + path: kubeconfig + - name: kube-router-cfg + configMap: + name: kube-router-cfg +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kube-router + namespace: kube-system +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: kube-router + namespace: kube-system +rules: + - apiGroups: + - "" + resources: + - namespaces + - pods + - services + - nodes + - endpoints + verbs: + - list + - get + - watch + - apiGroups: + - "networking.k8s.io" + resources: + - networkpolicies + verbs: + - list + - get + - watch + - apiGroups: + - extensions + resources: + - networkpolicies + verbs: + - get + - list + - watch +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: kube-router +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kube-router +subjects: +- kind: ServiceAccount + name: kube-router + namespace: kube-system