You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

414 lines
8.2 KiB

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: metallb-system
  5. labels:
  6. app: metallb
  7. ---
  8. apiVersion: policy/v1beta1
  9. kind: PodSecurityPolicy
  10. metadata:
  11. labels:
  12. app: metallb
  13. name: controller
  14. namespace: metallb-system
  15. spec:
  16. allowPrivilegeEscalation: false
  17. allowedCapabilities: []
  18. allowedHostPaths: []
  19. defaultAddCapabilities: []
  20. defaultAllowPrivilegeEscalation: false
  21. fsGroup:
  22. ranges:
  23. - max: 65535
  24. min: 1
  25. rule: MustRunAs
  26. hostIPC: false
  27. hostNetwork: false
  28. hostPID: false
  29. privileged: false
  30. readOnlyRootFilesystem: true
  31. requiredDropCapabilities:
  32. - ALL
  33. runAsUser:
  34. ranges:
  35. - max: 65535
  36. min: 1
  37. rule: MustRunAs
  38. seLinux:
  39. rule: RunAsAny
  40. supplementalGroups:
  41. ranges:
  42. - max: 65535
  43. min: 1
  44. rule: MustRunAs
  45. volumes:
  46. - configMap
  47. - secret
  48. - emptyDir
  49. ---
  50. apiVersion: policy/v1beta1
  51. kind: PodSecurityPolicy
  52. metadata:
  53. labels:
  54. app: metallb
  55. name: speaker
  56. namespace: metallb-system
  57. spec:
  58. allowPrivilegeEscalation: false
  59. allowedCapabilities:
  60. - NET_ADMIN
  61. - NET_RAW
  62. - SYS_ADMIN
  63. allowedHostPaths: []
  64. defaultAddCapabilities: []
  65. defaultAllowPrivilegeEscalation: false
  66. fsGroup:
  67. rule: RunAsAny
  68. hostIPC: false
  69. hostNetwork: true
  70. hostPID: false
  71. hostPorts:
  72. - max: {{ metallb_port }}
  73. min: {{ metallb_port }}
  74. privileged: true
  75. readOnlyRootFilesystem: true
  76. requiredDropCapabilities:
  77. - ALL
  78. runAsUser:
  79. rule: RunAsAny
  80. seLinux:
  81. rule: RunAsAny
  82. supplementalGroups:
  83. rule: RunAsAny
  84. volumes:
  85. - configMap
  86. - secret
  87. - emptyDir
  88. ---
  89. apiVersion: v1
  90. kind: ServiceAccount
  91. metadata:
  92. labels:
  93. app: metallb
  94. name: controller
  95. namespace: metallb-system
  96. ---
  97. apiVersion: v1
  98. kind: ServiceAccount
  99. metadata:
  100. labels:
  101. app: metallb
  102. name: speaker
  103. namespace: metallb-system
  104. ---
  105. apiVersion: rbac.authorization.k8s.io/v1
  106. kind: ClusterRole
  107. metadata:
  108. labels:
  109. app: metallb
  110. name: metallb-system:controller
  111. rules:
  112. - apiGroups:
  113. - ''
  114. resources:
  115. - services
  116. verbs:
  117. - get
  118. - list
  119. - watch
  120. - update
  121. - apiGroups:
  122. - ''
  123. resources:
  124. - services/status
  125. verbs:
  126. - update
  127. - apiGroups:
  128. - ''
  129. resources:
  130. - events
  131. verbs:
  132. - create
  133. - patch
  134. - apiGroups:
  135. - policy
  136. resourceNames:
  137. - controller
  138. resources:
  139. - podsecuritypolicies
  140. verbs:
  141. - use
  142. ---
  143. apiVersion: rbac.authorization.k8s.io/v1
  144. kind: ClusterRole
  145. metadata:
  146. labels:
  147. app: metallb
  148. name: metallb-system:speaker
  149. rules:
  150. - apiGroups:
  151. - ''
  152. resources:
  153. - services
  154. - endpoints
  155. - nodes
  156. verbs:
  157. - get
  158. - list
  159. - watch
  160. - apiGroups:
  161. - ''
  162. resources:
  163. - events
  164. verbs:
  165. - create
  166. - patch
  167. - apiGroups:
  168. - policy
  169. resourceNames:
  170. - speaker
  171. resources:
  172. - podsecuritypolicies
  173. verbs:
  174. - use
  175. ---
  176. apiVersion: rbac.authorization.k8s.io/v1
  177. kind: Role
  178. metadata:
  179. labels:
  180. app: metallb
  181. name: config-watcher
  182. namespace: metallb-system
  183. rules:
  184. - apiGroups:
  185. - ''
  186. resources:
  187. - configmaps
  188. verbs:
  189. - get
  190. - list
  191. - watch
  192. ---
  193. apiVersion: rbac.authorization.k8s.io/v1
  194. kind: Role
  195. metadata:
  196. labels:
  197. app: metallb
  198. name: pod-lister
  199. namespace: metallb-system
  200. rules:
  201. - apiGroups:
  202. - ''
  203. resources:
  204. - pods
  205. verbs:
  206. - list
  207. ---
  208. apiVersion: rbac.authorization.k8s.io/v1
  209. kind: ClusterRoleBinding
  210. metadata:
  211. labels:
  212. app: metallb
  213. name: metallb-system:controller
  214. roleRef:
  215. apiGroup: rbac.authorization.k8s.io
  216. kind: ClusterRole
  217. name: metallb-system:controller
  218. subjects:
  219. - kind: ServiceAccount
  220. name: controller
  221. namespace: metallb-system
  222. ---
  223. apiVersion: rbac.authorization.k8s.io/v1
  224. kind: ClusterRoleBinding
  225. metadata:
  226. labels:
  227. app: metallb
  228. name: metallb-system:speaker
  229. roleRef:
  230. apiGroup: rbac.authorization.k8s.io
  231. kind: ClusterRole
  232. name: metallb-system:speaker
  233. subjects:
  234. - kind: ServiceAccount
  235. name: speaker
  236. namespace: metallb-system
  237. ---
  238. apiVersion: rbac.authorization.k8s.io/v1
  239. kind: RoleBinding
  240. metadata:
  241. labels:
  242. app: metallb
  243. name: config-watcher
  244. namespace: metallb-system
  245. roleRef:
  246. apiGroup: rbac.authorization.k8s.io
  247. kind: Role
  248. name: config-watcher
  249. subjects:
  250. - kind: ServiceAccount
  251. name: controller
  252. - kind: ServiceAccount
  253. name: speaker
  254. ---
  255. apiVersion: rbac.authorization.k8s.io/v1
  256. kind: RoleBinding
  257. metadata:
  258. labels:
  259. app: metallb
  260. name: pod-lister
  261. namespace: metallb-system
  262. roleRef:
  263. apiGroup: rbac.authorization.k8s.io
  264. kind: Role
  265. name: pod-lister
  266. subjects:
  267. - kind: ServiceAccount
  268. name: speaker
  269. ---
  270. apiVersion: apps/v1
  271. kind: DaemonSet
  272. metadata:
  273. labels:
  274. app: metallb
  275. component: speaker
  276. name: speaker
  277. namespace: metallb-system
  278. spec:
  279. selector:
  280. matchLabels:
  281. app: metallb
  282. component: speaker
  283. template:
  284. metadata:
  285. annotations:
  286. prometheus.io/port: '{{ metallb_port }}'
  287. prometheus.io/scrape: 'true'
  288. labels:
  289. app: metallb
  290. component: speaker
  291. spec:
  292. containers:
  293. - args:
  294. - --port={{ metallb_port }}
  295. - --config=config
  296. env:
  297. - name: METALLB_NODE_NAME
  298. valueFrom:
  299. fieldRef:
  300. fieldPath: spec.nodeName
  301. - name: METALLB_HOST
  302. valueFrom:
  303. fieldRef:
  304. fieldPath: status.hostIP
  305. - name: METALLB_ML_BIND_ADDR
  306. valueFrom:
  307. fieldRef:
  308. fieldPath: status.podIP
  309. # needed when another software is also using memberlist / port 7946
  310. #- name: METALLB_ML_BIND_PORT
  311. # value: "7946"
  312. - name: METALLB_ML_LABELS
  313. value: "app=metallb,component=speaker"
  314. - name: METALLB_ML_NAMESPACE
  315. valueFrom:
  316. fieldRef:
  317. fieldPath: metadata.namespace
  318. - name: METALLB_ML_SECRET_KEY
  319. valueFrom:
  320. secretKeyRef:
  321. name: memberlist
  322. key: secretkey
  323. image: {{ metallb_speaker_image_repo }}:{{ metallb_version }}
  324. imagePullPolicy: {{ k8s_image_pull_policy }}
  325. name: speaker
  326. ports:
  327. - containerPort: {{ metallb_port }}
  328. name: monitoring
  329. resources:
  330. limits:
  331. cpu: {{ metallb_limits_cpu }}
  332. memory: {{ metallb_limits_mem }}
  333. securityContext:
  334. allowPrivilegeEscalation: false
  335. capabilities:
  336. add:
  337. - NET_ADMIN
  338. - NET_RAW
  339. - SYS_ADMIN
  340. drop:
  341. - ALL
  342. readOnlyRootFilesystem: true
  343. hostNetwork: true
  344. nodeSelector:
  345. kubernetes.io/os: linux
  346. serviceAccountName: speaker
  347. terminationGracePeriodSeconds: 2
  348. {% if metallb_speaker_nodeselector %}
  349. nodeSelector:
  350. {{ metallb_speaker_nodeselector | to_nice_yaml | indent(width=8) }}
  351. {%- endif %}
  352. {% if metallb_speaker_tolerations %}
  353. tolerations:
  354. {{ metallb_speaker_tolerations | to_nice_yaml(indent=2) | indent(width=8) }}
  355. {% endif %}
  356. ---
  357. apiVersion: apps/v1
  358. kind: Deployment
  359. metadata:
  360. labels:
  361. app: metallb
  362. component: controller
  363. name: controller
  364. namespace: metallb-system
  365. spec:
  366. revisionHistoryLimit: 3
  367. selector:
  368. matchLabels:
  369. app: metallb
  370. component: controller
  371. template:
  372. metadata:
  373. annotations:
  374. prometheus.io/port: '{{ metallb_port }}'
  375. prometheus.io/scrape: 'true'
  376. labels:
  377. app: metallb
  378. component: controller
  379. spec:
  380. {% if metallb_controller_nodeselector %}
  381. nodeSelector:
  382. {{ metallb_controller_nodeselector | to_nice_yaml | indent(width=8) }}
  383. {%- endif %}
  384. {% if metallb_controller_tolerations %}
  385. tolerations:
  386. {{ metallb_controller_tolerations | to_nice_yaml(indent=2) | indent(width=8) }}
  387. {% endif %}
  388. containers:
  389. - args:
  390. - --port={{ metallb_port }}
  391. - --config=config
  392. image: {{ metallb_controller_image_repo }}:{{ metallb_version }}
  393. imagePullPolicy: {{ k8s_image_pull_policy }}
  394. name: controller
  395. ports:
  396. - containerPort: {{ metallb_port }}
  397. name: monitoring
  398. resources:
  399. limits:
  400. cpu: {{ metallb_limits_cpu }}
  401. memory: {{ metallb_limits_mem }}
  402. securityContext:
  403. allowPrivilegeEscalation: false
  404. capabilities:
  405. drop:
  406. - all
  407. readOnlyRootFilesystem: true
  408. nodeSelector:
  409. kubernetes.io/os: linux
  410. securityContext:
  411. runAsNonRoot: true
  412. runAsUser: 65534
  413. serviceAccountName: controller
  414. terminationGracePeriodSeconds: 0