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. # ------------------- Dashboard Secrets ------------------- #
    15. apiVersion: v1
    16. kind: Secret
    17. metadata:
    18. labels:
    19. k8s-app: kubernetes-dashboard
    20. name: kubernetes-dashboard-certs
    21. namespace: kube-system
    22. type: Opaque
    23. ---
    24. apiVersion: v1
    25. kind: Secret
    26. metadata:
    27. labels:
    28. k8s-app: kubernetes-dashboard
    29. name: kubernetes-dashboard-csrf
    30. namespace: kube-system
    31. type: Opaque
    32. data:
    33. csrf: ""
    34. ---
    35. # ------------------- Dashboard Service Account ------------------- #
    36. apiVersion: v1
    37. kind: ServiceAccount
    38. metadata:
    39. labels:
    40. k8s-app: kubernetes-dashboard
    41. name: kubernetes-dashboard
    42. namespace: kube-system
    43. ---
    44. # ------------------- Dashboard Role & Role Binding ------------------- #
    45. kind: Role
    46. apiVersion: rbac.authorization.k8s.io/v1
    47. metadata:
    48. name: kubernetes-dashboard-minimal
    49. namespace: kube-system
    50. rules:
    51. # Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
    52. - apiGroups: [""]
    53. resources: ["secrets"]
    54. verbs: ["create"]
    55. # Allow Dashboard to create 'kubernetes-dashboard-settings' config map.
    56. - apiGroups: [""]
    57. resources: ["configmaps"]
    58. verbs: ["create"]
    59. # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
    60. - apiGroups: [""]
    61. resources: ["secrets"]
    62. resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
    63. verbs: ["get", "update", "delete"]
    64. # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
    65. - apiGroups: [""]
    66. resources: ["configmaps"]
    67. resourceNames: ["kubernetes-dashboard-settings"]
    68. verbs: ["get", "update"]
    69. # Allow Dashboard to get metrics from heapster.
    70. - apiGroups: [""]
    71. resources: ["services"]
    72. resourceNames: ["heapster"]
    73. verbs: ["proxy"]
    74. - apiGroups: [""]
    75. resources: ["services/proxy"]
    76. resourceNames: ["heapster", "http:heapster:", "https:heapster:"]
    77. verbs: ["get"]
    78. ---
    79. apiVersion: rbac.authorization.k8s.io/v1
    80. kind: RoleBinding
    81. metadata:
    82. name: kubernetes-dashboard-minimal
    83. namespace: kube-system
    84. roleRef:
    85. apiGroup: rbac.authorization.k8s.io
    86. kind: Role
    87. name: kubernetes-dashboard-minimal
    88. subjects:
    89. - kind: ServiceAccount
    90. name: kubernetes-dashboard
    91. namespace: kube-system
    92. ---
    93. # ------------------- Dashboard Deployment ------------------- #
    94. kind: Deployment
    95. apiVersion: apps/v1
    96. metadata:
    97. labels:
    98. k8s-app: kubernetes-dashboard
    99. name: kubernetes-dashboard
    100. namespace: kube-system
    101. spec:
    102. replicas: 1
    103. revisionHistoryLimit: 10
    104. selector:
    105. matchLabels:
    106. k8s-app: kubernetes-dashboard
    107. template:
    108. metadata:
    109. labels:
    110. k8s-app: kubernetes-dashboard
    111. spec:
    112. containers:
    113. - name: kubernetes-dashboard
    114. image: siriuszg/kubernetes-dashboard-amd64:v1.10.0
    115. ports:
    116. - containerPort: 8443
    117. protocol: TCP
    118. args:
    119. - --auto-generate-certificates
    120. - --token-ttl=43200
    121. # Uncomment the following line to manually specify Kubernetes API server Host
    122. # If not specified, Dashboard will attempt to auto discover the API server and connect
    123. # to it. Uncomment only if the default does not work.
    124. # - --apiserver-host=http://my-address:port
    125. volumeMounts:
    126. - name: kubernetes-dashboard-certs
    127. mountPath: /certs
    128. # Create on-disk volume to store exec logs
    129. - mountPath: /tmp
    130. name: tmp-volume
    131. livenessProbe:
    132. httpGet:
    133. scheme: HTTPS
    134. path: /
    135. port: 8443
    136. initialDelaySeconds: 30
    137. timeoutSeconds: 30
    138. volumes:
    139. - name: kubernetes-dashboard-certs
    140. secret:
    141. secretName: kubernetes-dashboard-certs
    142. - name: tmp-volume
    143. emptyDir: {}
    144. serviceAccountName: kubernetes-dashboard
    145. # Comment the following tolerations if Dashboard must not be deployed on master
    146. tolerations:
    147. - key: node-role.kubernetes.io/master
    148. effect: NoSchedule
    149. ---
    150. # ------------------- Dashboard Service ------------------- #
    151. kind: Service
    152. apiVersion: v1
    153. metadata:
    154. labels:
    155. k8s-app: kubernetes-dashboard
    156. name: kubernetes-dashboard
    157. namespace: kube-system
    158. spec:
    159. ports:
    160. - port: 443
    161. targetPort: 8443
    162. type: NodePort
    163. selector:
    164. k8s-app: kubernetes-dashboard