1. # Copyright 2017 The Kubernetes Authors.
    2. #
    3. # Licensed under the Apache License, Version 2.0 (the "License");
    4. # you may not use this file except in compliance with the License.
    5. # You may obtain a copy of the License at
    6. #
    7. # http://www.apache.org/licenses/LICENSE-2.0
    8. #
    9. # Unless required by applicable law or agreed to in writing, software
    10. # distributed under the License is distributed on an "AS IS" BASIS,
    11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12. # See the License for the specific language governing permissions and
    13. # limitations under the License.
    14. apiVersion: v1
    15. kind: Namespace
    16. metadata:
    17. name: kubernetes-dashboard
    18. ---
    19. apiVersion: v1
    20. kind: ServiceAccount
    21. metadata:
    22. labels:
    23. k8s-app: kubernetes-dashboard
    24. name: kubernetes-dashboard
    25. namespace: kubernetes-dashboard
    26. ---
    27. kind: Service
    28. apiVersion: v1
    29. metadata:
    30. labels:
    31. k8s-app: kubernetes-dashboard
    32. name: kubernetes-dashboard
    33. namespace: kubernetes-dashboard
    34. spec:
    35. ports:
    36. - port: 443
    37. targetPort: 8443
    38. selector:
    39. k8s-app: kubernetes-dashboard
    40. ---
    41. apiVersion: v1
    42. kind: Secret
    43. metadata:
    44. labels:
    45. k8s-app: kubernetes-dashboard
    46. name: kubernetes-dashboard-certs
    47. namespace: kubernetes-dashboard
    48. type: Opaque
    49. ---
    50. apiVersion: v1
    51. kind: Secret
    52. metadata:
    53. labels:
    54. k8s-app: kubernetes-dashboard
    55. name: kubernetes-dashboard-csrf
    56. namespace: kubernetes-dashboard
    57. type: Opaque
    58. data:
    59. csrf: ""
    60. ---
    61. apiVersion: v1
    62. kind: Secret
    63. metadata:
    64. labels:
    65. k8s-app: kubernetes-dashboard
    66. name: kubernetes-dashboard-key-holder
    67. namespace: kubernetes-dashboard
    68. type: Opaque
    69. ---
    70. kind: ConfigMap
    71. apiVersion: v1
    72. metadata:
    73. labels:
    74. k8s-app: kubernetes-dashboard
    75. name: kubernetes-dashboard-settings
    76. namespace: kubernetes-dashboard
    77. ---
    78. kind: Role
    79. apiVersion: rbac.authorization.k8s.io/v1
    80. metadata:
    81. labels:
    82. k8s-app: kubernetes-dashboard
    83. name: kubernetes-dashboard
    84. namespace: kubernetes-dashboard
    85. rules:
    86. # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
    87. - apiGroups: [""]
    88. resources: ["secrets"]
    89. resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
    90. verbs: ["get", "update", "delete"]
    91. # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
    92. - apiGroups: [""]
    93. resources: ["configmaps"]
    94. resourceNames: ["kubernetes-dashboard-settings"]
    95. verbs: ["get", "update"]
    96. # Allow Dashboard to get metrics.
    97. - apiGroups: [""]
    98. resources: ["services"]
    99. resourceNames: ["heapster", "dashboard-metrics-scraper"]
    100. verbs: ["proxy"]
    101. - apiGroups: [""]
    102. resources: ["services/proxy"]
    103. resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
    104. verbs: ["get"]
    105. ---
    106. kind: ClusterRole
    107. apiVersion: rbac.authorization.k8s.io/v1
    108. metadata:
    109. labels:
    110. k8s-app: kubernetes-dashboard
    111. name: kubernetes-dashboard
    112. rules:
    113. # Allow Metrics Scraper to get metrics from the Metrics server
    114. - apiGroups: ["metrics.k8s.io"]
    115. resources: ["pods", "nodes"]
    116. verbs: ["get", "list", "watch"]
    117. ---
    118. apiVersion: rbac.authorization.k8s.io/v1
    119. kind: RoleBinding
    120. metadata:
    121. labels:
    122. k8s-app: kubernetes-dashboard
    123. name: kubernetes-dashboard
    124. namespace: kubernetes-dashboard
    125. roleRef:
    126. apiGroup: rbac.authorization.k8s.io
    127. kind: Role
    128. name: kubernetes-dashboard
    129. subjects:
    130. - kind: ServiceAccount
    131. name: kubernetes-dashboard
    132. namespace: kubernetes-dashboard
    133. ---
    134. apiVersion: rbac.authorization.k8s.io/v1
    135. kind: ClusterRoleBinding
    136. metadata:
    137. name: kubernetes-dashboard
    138. roleRef:
    139. apiGroup: rbac.authorization.k8s.io
    140. kind: ClusterRole
    141. name: kubernetes-dashboard
    142. subjects:
    143. - kind: ServiceAccount
    144. name: kubernetes-dashboard
    145. namespace: kubernetes-dashboard
    146. ---
    147. kind: Deployment
    148. apiVersion: apps/v1
    149. metadata:
    150. labels:
    151. k8s-app: kubernetes-dashboard
    152. name: kubernetes-dashboard
    153. namespace: kubernetes-dashboard
    154. spec:
    155. replicas: 1
    156. revisionHistoryLimit: 10
    157. selector:
    158. matchLabels:
    159. k8s-app: kubernetes-dashboard
    160. template:
    161. metadata:
    162. labels:
    163. k8s-app: kubernetes-dashboard
    164. spec:
    165. containers:
    166. - name: kubernetes-dashboard
    167. image: kubernetesui/dashboard:v2.4.0
    168. imagePullPolicy: Always
    169. ports:
    170. - containerPort: 8443
    171. protocol: TCP
    172. args:
    173. - --auto-generate-certificates
    174. - --namespace=kubernetes-dashboard
    175. # Uncomment the following line to manually specify Kubernetes API server Host
    176. # If not specified, Dashboard will attempt to auto discover the API server and connect
    177. # to it. Uncomment only if the default does not work.
    178. # - --apiserver-host=http://my-address:port
    179. volumeMounts:
    180. - name: kubernetes-dashboard-certs
    181. mountPath: /certs
    182. # Create on-disk volume to store exec logs
    183. - mountPath: /tmp
    184. name: tmp-volume
    185. livenessProbe:
    186. httpGet:
    187. scheme: HTTPS
    188. path: /
    189. port: 8443
    190. initialDelaySeconds: 30
    191. timeoutSeconds: 30
    192. securityContext:
    193. allowPrivilegeEscalation: false
    194. readOnlyRootFilesystem: true
    195. runAsUser: 1001
    196. runAsGroup: 2001
    197. volumes:
    198. - name: kubernetes-dashboard-certs
    199. secret:
    200. secretName: kubernetes-dashboard-certs
    201. - name: tmp-volume
    202. emptyDir: {}
    203. serviceAccountName: kubernetes-dashboard
    204. nodeSelector:
    205. "kubernetes.io/os": linux
    206. # Comment the following tolerations if Dashboard must not be deployed on master
    207. tolerations:
    208. - key: node-role.kubernetes.io/master
    209. effect: NoSchedule
    210. ---
    211. kind: Service
    212. apiVersion: v1
    213. metadata:
    214. labels:
    215. k8s-app: dashboard-metrics-scraper
    216. name: dashboard-metrics-scraper
    217. namespace: kubernetes-dashboard
    218. spec:
    219. ports:
    220. - port: 8000
    221. targetPort: 8000
    222. selector:
    223. k8s-app: dashboard-metrics-scraper
    224. ---
    225. kind: Deployment
    226. apiVersion: apps/v1
    227. metadata:
    228. labels:
    229. k8s-app: dashboard-metrics-scraper
    230. name: dashboard-metrics-scraper
    231. namespace: kubernetes-dashboard
    232. spec:
    233. replicas: 1
    234. revisionHistoryLimit: 10
    235. selector:
    236. matchLabels:
    237. k8s-app: dashboard-metrics-scraper
    238. template:
    239. metadata:
    240. labels:
    241. k8s-app: dashboard-metrics-scraper
    242. spec:
    243. securityContext:
    244. seccompProfile:
    245. type: RuntimeDefault
    246. containers:
    247. - name: dashboard-metrics-scraper
    248. image: kubernetesui/metrics-scraper:v1.0.7
    249. ports:
    250. - containerPort: 8000
    251. protocol: TCP
    252. livenessProbe:
    253. httpGet:
    254. scheme: HTTP
    255. path: /
    256. port: 8000
    257. initialDelaySeconds: 30
    258. timeoutSeconds: 30
    259. volumeMounts:
    260. - mountPath: /tmp
    261. name: tmp-volume
    262. securityContext:
    263. allowPrivilegeEscalation: false
    264. readOnlyRootFilesystem: true
    265. runAsUser: 1001
    266. runAsGroup: 2001
    267. serviceAccountName: kubernetes-dashboard
    268. nodeSelector:
    269. "kubernetes.io/os": linux
    270. # Comment the following tolerations if Dashboard must not be deployed on master
    271. tolerations:
    272. - key: node-role.kubernetes.io/master
    273. effect: NoSchedule
    274. volumes:
    275. - name: tmp-volume
    276. emptyDir: {}