1
0
mirror of https://github.com/rancher/rke.git synced 2025-06-30 17:22:07 +00:00

Merge pull request #118 from moelsayed/fix_115

Enable AWS specific configuration for Calico
This commit is contained in:
Alena Prokharchyk 2017-12-12 15:43:11 -08:00 committed by GitHub
commit d99cd9365b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 98 additions and 19 deletions

View File

@ -10,6 +10,9 @@ auth:
# calico
# canal
# weave
#
# If you are using calico on AWS, use the network plugin config option:
# 'cloud_provider: aws'
network:
plugin: flannel
options:

View File

@ -11,7 +11,8 @@ const (
DefaultAuthStrategy = "x509"
DefaultNetworkPlugin = "flannel"
DefaultNetworkPlugin = "flannel"
DefaultNetworkCloudProvider = "none"
DefaultInfraContainerImage = "gcr.io/google_containers/pause-amd64:3.0"
DefaultAplineImage = "alpine:latest"
@ -19,16 +20,20 @@ const (
DefaultCertDownloaderImage = "rancher/rke-cert-deployer:0.1.0"
DefaultServiceSidekickImage = "rancher/rke-service-sidekick:0.1.0"
DefaultFlannelImage = "quay.io/coreos/flannel:v0.9.1"
DefaultFlannelCNIImage = "quay.io/coreos/flannel-cni:v0.2.0"
DefaultFlannelImage = "quay.io/coreos/flannel:v0.9.1"
DefaultFlannelCNIImage = "quay.io/coreos/flannel-cni:v0.2.0"
DefaultCalicoNodeImage = "quay.io/calico/node:v2.6.2"
DefaultCalicoCNIImage = "quay.io/calico/cni:v1.11.0"
DefaultCalicoControllersImage = "quay.io/calico/kube-controllers:v1.0.0"
DefaultCanalNodeImage = "quay.io/calico/node:v2.6.2"
DefaultCanalCNIImage = "quay.io/calico/cni:v1.11.0"
DefaultCanalFlannelImage = "quay.io/coreos/flannel:v0.9.1"
DefaultWeaveImage = "weaveworks/weave-kube:2.1.2"
DefaultWeaveCNIImage = "weaveworks/weave-npc:2.1.2"
DefaultCalicoctlImage = "quay.io/calico/ctl:v1.6.2"
DefaultWeaveImage = "weaveworks/weave-kube:2.1.2"
DefaultWeaveCNIImage = "weaveworks/weave-npc:2.1.2"
DefaultCanalNodeImage = "quay.io/calico/node:v2.6.2"
DefaultCanalCNIImage = "quay.io/calico/cni:v1.11.0"
DefaultCanalFlannelImage = "quay.io/coreos/flannel:v0.9.1"
DefaultKubeDNSImage = "gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5"
DefaultDNSMasqImage = "gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5"

View File

@ -11,6 +11,7 @@ import (
const (
NetworkPluginResourceName = "rke-network-plugin"
CloudProvider = "cloud_provider"
FlannelNetworkPlugin = "flannel"
FlannelImage = "flannel_image"
@ -21,6 +22,7 @@ const (
CalicoNodeImage = "calico_node_image"
CalicoCNIImage = "calico_cni_image"
CalicoControllersImages = "calico_controllers_image"
CalicoctlImage = "calicoctl_image"
CanalNetworkPlugin = "canal"
CanalNodeImage = "canal_node_image"
@ -71,6 +73,8 @@ func (c *Cluster) doCalicoDeploy() error {
network.CNIImage: c.Network.Options[CalicoCNIImage],
network.NodeImage: c.Network.Options[CalicoNodeImage],
network.ControllersImage: c.Network.Options[CalicoControllersImages],
network.CalicoctlImage: c.Network.Options[CalicoctlImage],
network.CloudProvider: c.Network.Options[CloudProvider],
}
pluginYaml := network.GetCalicoManifest(calicoConfig)
return c.doAddonDeploy(pluginYaml, NetworkPluginResourceName)
@ -103,23 +107,39 @@ func (c *Cluster) setClusterNetworkDefaults() {
// don't break if the user didn't define options
c.Network.Options = make(map[string]string)
}
networkPluginConfigDefaultsMap := make(map[string]string)
switch {
case c.Network.Plugin == FlannelNetworkPlugin:
setDefaultIfEmptyMapValue(c.Network.Options, FlannelImage, DefaultFlannelImage)
setDefaultIfEmptyMapValue(c.Network.Options, FlannelCNIImage, DefaultFlannelCNIImage)
networkPluginConfigDefaultsMap = map[string]string{
FlannelImage: DefaultFlannelImage,
FlannelCNIImage: DefaultFlannelCNIImage,
}
case c.Network.Plugin == CalicoNetworkPlugin:
setDefaultIfEmptyMapValue(c.Network.Options, CalicoCNIImage, DefaultCalicoCNIImage)
setDefaultIfEmptyMapValue(c.Network.Options, CalicoNodeImage, DefaultCalicoNodeImage)
setDefaultIfEmptyMapValue(c.Network.Options, CalicoControllersImages, DefaultCalicoControllersImage)
networkPluginConfigDefaultsMap = map[string]string{
CalicoCNIImage: DefaultCalicoCNIImage,
CalicoNodeImage: DefaultCalicoNodeImage,
CalicoControllersImages: DefaultCalicoControllersImage,
CloudProvider: DefaultNetworkCloudProvider,
CalicoctlImage: DefaultCalicoctlImage,
}
case c.Network.Plugin == CanalNetworkPlugin:
setDefaultIfEmptyMapValue(c.Network.Options, CanalCNIImage, DefaultCanalCNIImage)
setDefaultIfEmptyMapValue(c.Network.Options, CanalNodeImage, DefaultCanalNodeImage)
setDefaultIfEmptyMapValue(c.Network.Options, CanalFlannelImage, DefaultCanalFlannelImage)
networkPluginConfigDefaultsMap = map[string]string{
CanalCNIImage: DefaultCanalCNIImage,
CanalNodeImage: DefaultCanalNodeImage,
CanalFlannelImage: DefaultCanalFlannelImage,
}
case c.Network.Plugin == WeaveNetworkPlugin:
setDefaultIfEmptyMapValue(c.Network.Options, WeaveImage, DefaultWeaveImage)
setDefaultIfEmptyMapValue(c.Network.Options, WeaveCNIImage, DefaultWeaveCNIImage)
networkPluginConfigDefaultsMap = map[string]string{
WeaveImage: DefaultWeaveImage,
WeaveCNIImage: DefaultWeaveCNIImage,
}
}
for k, v := range networkPluginConfigDefaultsMap {
setDefaultIfEmptyMapValue(c.Network.Options, k, v)
}
}

View File

@ -1,6 +1,54 @@
package network
func GetCalicoManifest(calicoConfig map[string]string) string {
awsIPPool := ""
if calicoConfig[CloudProvider] == AWSCloudProvider {
awsIPPool = `
---
kind: ConfigMap
apiVersion: v1
metadata:
name: aws-ippool
namespace: kube-system
data:
aws-ippool: |-
apiVersion: v1
kind: ipPool
metadata:
cidr: ` + calicoConfig[ClusterCIDR] + `
spec:
nat-outgoing: true
---
apiVersion: v1
kind: Pod
metadata:
name: calicoctl
namespace: kube-system
spec:
hostNetwork: true
restartPolicy: OnFailure
containers:
- name: calicoctl
image: ` + calicoConfig[CalicoctlImage] + `
command: ["/bin/sh", "-c", "calicoctl apply -f aws-ippool.yaml"]
env:
- name: ETCD_ENDPOINTS
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_endpoints
volumeMounts:
- name: ippool-config
mountPath: /root/
volumes:
- name: ippool-config
configMap:
name: aws-ippool
items:
- key: aws-ippool
path: aws-ippool.yaml
`
}
return `# Calico Version master
# https://docs.projectcalico.org/master/releases#master
@ -389,11 +437,11 @@ metadata:
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: calico-node
namespace: kube-system
` + awsIPPool + `
`
}

View File

@ -11,7 +11,10 @@ const (
CNIImage = "cniImage"
NodeImage = "nodeImage"
ControllersImage = "controllersImage"
CalicoctlImage = "calicoctlImage"
FlannelImage = "flannelImage"
FlannelCNIImage = "flannelCNIImage"
FlannelIface = "flannelIface"
CloudProvider = "cloudprovider"
AWSCloudProvider = "aws"
)