netd.yaml (244 lines of code) (raw):
# Copyright 2018 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: netd
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups: [""]
resources: ["nodes", "pods"]
verbs: ["get","watch","list"]
---
kind: ServiceAccount
apiVersion: v1
metadata:
name: netd
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: netd
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: netd
subjects:
- kind: ServiceAccount
name: netd
namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
name: netd-config
namespace: kube-system
labels:
addonmanager.kubernetes.io/mode: Reconcile
data:
cni_spec_template: |-
{
"name": "gke-pod-network",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "@cniType",
"mtu": @mtu,
"ipam": {
"type": "host-local",
"ranges": [
@ipv4Subnet@ipv6SubnetOptional
],
"routes": [
{"dst": "0.0.0.0/0"}@ipv6RouteOptional
]
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}@cniBandwidthPlugin@cniCiliumPlugin@cniIstioPlugin
]
}
cni_spec_name: "10-gke-ptp.conflist"
cni_spec_ipv6_route: "{\"dst\": \"::/0\"}"
enable_policy_routing: "true"
enable_masquerade: "true"
enable_calico_network_policy: "false"
enable_ipv6: "false"
enable_bandwidth_plugin: "true"
enable_cilium_plugin: "true"
master_ip: "10.0.0.1"
reconcile_interval_seconds: "60s"
enable_pod_watch: "true"
---
kind: ConfigMap
apiVersion: v1
metadata:
name: networking-metrics-config
namespace: kube-system
labels:
addonmanager.kubernetes.io/mode: EnsureExists
data:
metrics_collectors: "conntrack,socket,kernel_metrics"
metrics_address: "localhost:10231"
---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
name: netd
namespace: kube-system
labels:
k8s-app: netd
addonmanager.kubernetes.io/mode: Reconcile
spec:
selector:
matchLabels:
k8s-app: netd
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 10%
template:
metadata:
labels:
k8s-app: netd
spec:
priorityClassName: system-node-critical
serviceAccountName: netd
terminationGracePeriodSeconds: 0
nodeSelector:
cloud.google.com/gke-netd-ready: "true"
tolerations:
- operator: "Exists"
effect: "NoExecute"
- operator: "Exists"
effect: "NoSchedule"
hostNetwork: true
initContainers:
- image: gcr.io/google-containers/netd-init:latest
name: netd-init
env:
- name: CNI_SPEC_TEMPLATE
valueFrom:
configMapKeyRef:
name: netd-config
key: cni_spec_template
- name: CNI_SPEC_NAME
valueFrom:
configMapKeyRef:
name: netd-config
key: cni_spec_name
- name: CNI_SPEC_IPV6_ROUTE
valueFrom:
configMapKeyRef:
name: netd-config
key: cni_spec_ipv6_route
- name: ENABLE_CALICO_NETWORK_POLICY
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_calico_network_policy
- name: WRITE_CALICO_CONFIG_FILE
value: "false"
- name: ENABLE_IPV6
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_ipv6
- name: ENABLE_MASQUERADE
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_masquerade
- name: ENABLE_BANDWIDTH_PLUGIN
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_bandwidth_plugin
- name: ENABLE_CILIUM_PLUGIN
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_cilium_plugin
- name: ISTIO_CNI_CONFIG
valueFrom:
configMapKeyRef:
name: istio-cni-plugin-config
key: cni_network_config
optional: true
- name: KUBERNETES_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: netd-config
key: master_ip
volumeMounts:
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
- mountPath: /host/home/kubernetes/bin
name: kubernetes-bin
readOnly: true
containers:
- image: gcr.io/google-containers/netd:latest
name: netd
imagePullPolicy: Always
hostPID: true
securityContext:
privileged: true
capabilities:
add: ["NET_ADMIN"]
args:
- --enable-policy-routing=$(ENABLE_POLICY_ROUTING)
- --logtostderr
- --enable-pod-watch=$(ENABLE_POD_WATCH)
- --reconcile-interval-seconds=$(RECONCILE_INTERVAL_SECONDS)
- --metrics-collectors=$(METRICS_COLLECTORS)
- --metrics-address=$(METRICS_ADDRESS)
env:
- name: CURRENT_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: ENABLE_POD_WATCH
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_pod_watch
- name: ENABLE_POLICY_ROUTING
valueFrom:
configMapKeyRef:
name: netd-config
key: enable_policy_routing
- name: RECONCILE_INTERVAL_SECONDS
valueFrom:
configMapKeyRef:
name: netd-config
key: reconcile_interval_seconds
- name: METRICS_COLLECTORS
valueFrom:
configMapKeyRef:
name: networking-metrics-config
key: metrics_collectors
- name: METRICS_ADDRESS
valueFrom:
configMapKeyRef:
name: networking-metrics-config
key: metrics_address
volumes:
- name: cni-net-dir
hostPath:
path: /etc/cni/net.d
- name: kubernetes-bin
hostPath:
path: /home/kubernetes/bin
type: Directory