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.

156 lines
4.8 KiB

  1. ---
  2. - name: Kubernetes Apps | Wait for kube-apiserver
  3. uri:
  4. url: "{{ kube_apiserver_endpoint }}/healthz"
  5. validate_certs: no
  6. client_cert: "{{ kube_apiserver_client_cert }}"
  7. client_key: "{{ kube_apiserver_client_key }}"
  8. register: result
  9. until: result.status == 200
  10. retries: 10
  11. delay: 6
  12. when: inventory_hostname == groups['kube_control_plane'][0]
  13. - name: Kubernetes Apps | Check AppArmor status
  14. command: which apparmor_parser
  15. register: apparmor_status
  16. when:
  17. - podsecuritypolicy_enabled
  18. - inventory_hostname == groups['kube_control_plane'][0]
  19. failed_when: false
  20. - name: Kubernetes Apps | Set apparmor_enabled
  21. set_fact:
  22. apparmor_enabled: "{{ apparmor_status.rc == 0 }}"
  23. when:
  24. - podsecuritypolicy_enabled
  25. - inventory_hostname == groups['kube_control_plane'][0]
  26. - name: Kubernetes Apps | Render templates for PodSecurityPolicy
  27. template:
  28. src: "{{ item.file }}.j2"
  29. dest: "{{ kube_config_dir }}/{{ item.file }}"
  30. mode: 0640
  31. register: psp_manifests
  32. with_items:
  33. - {file: psp.yml, type: psp, name: psp}
  34. - {file: psp-cr.yml, type: clusterrole, name: psp-cr}
  35. - {file: psp-crb.yml, type: rolebinding, name: psp-crb}
  36. when:
  37. - podsecuritypolicy_enabled
  38. - inventory_hostname == groups['kube_control_plane'][0]
  39. - name: Kubernetes Apps | Add policies, roles, bindings for PodSecurityPolicy
  40. kube:
  41. name: "{{ item.item.name }}"
  42. kubectl: "{{ bin_dir }}/kubectl"
  43. resource: "{{ item.item.type }}"
  44. filename: "{{ kube_config_dir }}/{{ item.item.file }}"
  45. state: "latest"
  46. register: result
  47. until: result is succeeded
  48. retries: 10
  49. delay: 6
  50. with_items: "{{ psp_manifests.results }}"
  51. when:
  52. - inventory_hostname == groups['kube_control_plane'][0]
  53. - not item is skipped
  54. loop_control:
  55. label: "{{ item.item.file }}"
  56. - name: Kubernetes Apps | Add ClusterRoleBinding to admit nodes
  57. template:
  58. src: "node-crb.yml.j2"
  59. dest: "{{ kube_config_dir }}/node-crb.yml"
  60. mode: 0640
  61. register: node_crb_manifest
  62. when:
  63. - rbac_enabled
  64. - inventory_hostname == groups['kube_control_plane'][0]
  65. - name: Apply workaround to allow all nodes with cert O=system:nodes to register
  66. kube:
  67. name: "kubespray:system:node"
  68. kubectl: "{{ bin_dir }}/kubectl"
  69. resource: "clusterrolebinding"
  70. filename: "{{ kube_config_dir }}/node-crb.yml"
  71. state: latest
  72. register: result
  73. until: result is succeeded
  74. retries: 10
  75. delay: 6
  76. when:
  77. - rbac_enabled
  78. - node_crb_manifest.changed
  79. - inventory_hostname == groups['kube_control_plane'][0]
  80. - name: Kubernetes Apps | Add webhook ClusterRole that grants access to proxy, stats, log, spec, and metrics on a kubelet
  81. template:
  82. src: "node-webhook-cr.yml.j2"
  83. dest: "{{ kube_config_dir }}/node-webhook-cr.yml"
  84. mode: 0640
  85. register: node_webhook_cr_manifest
  86. when:
  87. - rbac_enabled
  88. - kubelet_authorization_mode_webhook
  89. - inventory_hostname == groups['kube_control_plane'][0]
  90. tags: node-webhook
  91. - name: Apply webhook ClusterRole
  92. kube:
  93. name: "system:node-webhook"
  94. kubectl: "{{ bin_dir }}/kubectl"
  95. resource: "clusterrole"
  96. filename: "{{ kube_config_dir }}/node-webhook-cr.yml"
  97. state: latest
  98. when:
  99. - rbac_enabled
  100. - kubelet_authorization_mode_webhook
  101. - node_webhook_cr_manifest.changed
  102. - inventory_hostname == groups['kube_control_plane'][0]
  103. tags: node-webhook
  104. - name: Kubernetes Apps | Add ClusterRoleBinding for system:nodes to webhook ClusterRole
  105. template:
  106. src: "node-webhook-crb.yml.j2"
  107. dest: "{{ kube_config_dir }}/node-webhook-crb.yml"
  108. mode: 0640
  109. register: node_webhook_crb_manifest
  110. when:
  111. - rbac_enabled
  112. - kubelet_authorization_mode_webhook
  113. - inventory_hostname == groups['kube_control_plane'][0]
  114. tags: node-webhook
  115. - name: Grant system:nodes the webhook ClusterRole
  116. kube:
  117. name: "system:node-webhook"
  118. kubectl: "{{ bin_dir }}/kubectl"
  119. resource: "clusterrolebinding"
  120. filename: "{{ kube_config_dir }}/node-webhook-crb.yml"
  121. state: latest
  122. when:
  123. - rbac_enabled
  124. - kubelet_authorization_mode_webhook
  125. - node_webhook_crb_manifest.changed
  126. - inventory_hostname == groups['kube_control_plane'][0]
  127. tags: node-webhook
  128. - include_tasks: oci.yml
  129. tags: oci
  130. when:
  131. - cloud_provider is defined
  132. - cloud_provider == 'oci'
  133. - name: PriorityClass | Copy k8s-cluster-critical-pc.yml file
  134. copy: src=k8s-cluster-critical-pc.yml dest={{ kube_config_dir }}/k8s-cluster-critical-pc.yml mode=0640
  135. when: inventory_hostname == groups['kube_control_plane']|last
  136. - name: PriorityClass | Create k8s-cluster-critical
  137. kube:
  138. name: k8s-cluster-critical
  139. kubectl: "{{ bin_dir }}/kubectl"
  140. resource: "PriorityClass"
  141. filename: "{{ kube_config_dir }}/k8s-cluster-critical-pc.yml"
  142. state: latest
  143. when: inventory_hostname == groups['kube_control_plane']|last