mirror of
https://github.com/KevinMidboe/kazan-ansible.git
synced 2025-10-29 09:40:14 +00:00
kubernetes role for controller nodes
This commit is contained in:
68
roles/kubernetes/files/audit-policy.yml
Normal file
68
roles/kubernetes/files/audit-policy.yml
Normal file
@@ -0,0 +1,68 @@
|
||||
apiVersion: audit.k8s.io/v1 # This is required.
|
||||
kind: Policy
|
||||
# Don't generate audit events for all requests in RequestReceived stage.
|
||||
omitStages:
|
||||
- "RequestReceived"
|
||||
rules:
|
||||
# Log pod changes at RequestResponse level
|
||||
- level: RequestResponse
|
||||
resources:
|
||||
- group: ""
|
||||
# Resource "pods" doesn't match requests to any subresource of pods,
|
||||
# which is consistent with the RBAC policy.
|
||||
resources: ["pods"]
|
||||
# Log "pods/log", "pods/status" at Metadata level
|
||||
- level: Metadata
|
||||
resources:
|
||||
- group: ""
|
||||
resources: ["pods/log", "pods/status"]
|
||||
|
||||
# Don't log requests to a configmap called "controller-leader"
|
||||
- level: None
|
||||
resources:
|
||||
- group: ""
|
||||
resources: ["configmaps"]
|
||||
resourceNames: ["controller-leader"]
|
||||
|
||||
# Don't log watch requests by the "system:kube-proxy" on endpoints or services
|
||||
- level: None
|
||||
users: ["system:kube-proxy"]
|
||||
verbs: ["watch"]
|
||||
resources:
|
||||
- group: "" # core API group
|
||||
resources: ["endpoints", "services"]
|
||||
|
||||
# Don't log authenticated requests to certain non-resource URL paths.
|
||||
- level: None
|
||||
userGroups: ["system:authenticated"]
|
||||
nonResourceURLs:
|
||||
- "/api*" # Wildcard matching.
|
||||
- "/version"
|
||||
|
||||
# Log the request body of configmap changes in kube-system.
|
||||
- level: Request
|
||||
resources:
|
||||
- group: "" # core API group
|
||||
resources: ["configmaps"]
|
||||
# This rule only applies to resources in the "kube-system" namespace.
|
||||
# The empty string "" can be used to select non-namespaced resources.
|
||||
namespaces: ["kube-system"]
|
||||
|
||||
# Log configmap and secret changes in all other namespaces at the Metadata level.
|
||||
- level: Metadata
|
||||
resources:
|
||||
- group: "" # core API group
|
||||
resources: ["secrets", "configmaps"]
|
||||
|
||||
# Log all other resources in core and extensions at the Request level.
|
||||
- level: Request
|
||||
resources:
|
||||
- group: "" # core API group
|
||||
- group: "extensions" # Version of group should NOT be included.
|
||||
|
||||
# A catch-all rule to log all other requests at the Metadata level.
|
||||
- level: Metadata
|
||||
# Long-running requests like watches that fall under this rule will not
|
||||
# generate an audit event in RequestReceived.
|
||||
omitStages:
|
||||
- "RequestReceived"
|
||||
6
roles/kubernetes/files/kube-scheduler.yml
Normal file
6
roles/kubernetes/files/kube-scheduler.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
apiVersion: kubescheduler.config.k8s.io/v1beta2
|
||||
kind: KubeSchedulerConfiguration
|
||||
clientConnection:
|
||||
kubeconfig: "/var/lib/kubernetes/kube-scheduler.kubeconfig"
|
||||
leaderElection:
|
||||
leaderElect: true
|
||||
142
roles/kubernetes/tasks/main.yml
Normal file
142
roles/kubernetes/tasks/main.yml
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
- name: Download Kuberneters controller binaries
|
||||
get_url:
|
||||
url: "{{ kubernetes_download_path }}/{{ item }}"
|
||||
dest: /usr/local/bin
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0755
|
||||
# TODO Add hash check
|
||||
with_items:
|
||||
- kube-apiserver
|
||||
- kube-controller-manager
|
||||
- kube-scheduler
|
||||
- kubectl
|
||||
become: true
|
||||
|
||||
- name: Create kubernetes var dir
|
||||
file: path=/var/lib/kubernetes state=directory
|
||||
become: true
|
||||
|
||||
- name: Create kubernetes etc dir
|
||||
file: path=/etc/kubernetes/config state=directory
|
||||
become: true
|
||||
|
||||
- name: Copy Authorisation files
|
||||
copy:
|
||||
src: "{{ playbook_dir }}/../../kazan-ssl/data-encryption/{{ item }}"
|
||||
dest: /var/lib/kubernetes
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
with_items:
|
||||
- encryption-config.yaml
|
||||
become: true
|
||||
|
||||
- name: Copy cert files
|
||||
copy:
|
||||
src: "{{ playbook_dir }}/../../kazan-ssl/pki/{{ item }}"
|
||||
dest: /var/lib/kubernetes
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
with_items:
|
||||
- ca/ca.pem
|
||||
- ca/ca-key.pem
|
||||
- api/kubernetes-key.pem
|
||||
- api/kubernetes.pem
|
||||
- service-account/service-account-key.pem
|
||||
- service-account/service-account.pem
|
||||
- front-proxy/front-proxy-key.pem
|
||||
- front-proxy/front-proxy.pem
|
||||
become: true
|
||||
|
||||
- name: Copy kube-* kubeconfig files
|
||||
copy:
|
||||
src: "{{ playbook_dir }}/../../kazan-ssl/configs/{{ item }}"
|
||||
dest: /var/lib/kubernetes
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
with_items:
|
||||
- controller/kube-controller-manager.kubeconfig
|
||||
- scheduler/kube-scheduler.kubeconfig
|
||||
become: true
|
||||
|
||||
- name: Copy kube-* config files
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: /etc/kubernetes/config
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
with_items:
|
||||
- kube-scheduler.yml
|
||||
become: true
|
||||
|
||||
- name: Copy kube audit policy file
|
||||
copy:
|
||||
src: audit-policy.yml
|
||||
dest: /etc/kubernetes
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
become: true
|
||||
|
||||
- name: Copy admin kube config
|
||||
copy:
|
||||
src: "{{ playbook_dir }}/../../kazan-ssl/configs/admin/admin.kubeconfig"
|
||||
dest: /opt/kubernetes/admin.kubeconfig
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
directory_mode: false
|
||||
become: true
|
||||
|
||||
- name: Add kube-* systemd unit
|
||||
template:
|
||||
src: "{{ item }}.service.j2"
|
||||
dest: /etc/systemd/system/{{ item }}.service
|
||||
mode: 700
|
||||
with_items:
|
||||
- kube-controller-manager
|
||||
- kube-apiserver
|
||||
- kube-scheduler
|
||||
become: true
|
||||
|
||||
- name: Reload systemd
|
||||
command: systemctl daemon-reload
|
||||
become: true
|
||||
|
||||
- name: Enable kube-* services
|
||||
command: "systemctl enable {{ item }}"
|
||||
with_items:
|
||||
- kube-apiserver
|
||||
- kube-controller-manager
|
||||
- kube-scheduler
|
||||
become: true
|
||||
|
||||
- name: Restart kube-* services
|
||||
service:
|
||||
name: "{{ item }}"
|
||||
state: restarted
|
||||
enabled: yes
|
||||
with_items:
|
||||
- kube-apiserver
|
||||
- kube-controller-manager
|
||||
- kube-scheduler
|
||||
become: true
|
||||
|
||||
- name: Verify Kubernetes status
|
||||
shell: kubectl get componentstatuses --kubeconfig /opt/kubernetes/admin.kubeconfig
|
||||
register: cmd_result
|
||||
retries: 5
|
||||
delay: 10
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "'scheduler Healthy' in cmd_result.stdout"
|
||||
- "'controller-manager Healthy' in cmd_result.stdout"
|
||||
- "'etcd-0 Healthy' in cmd_result.stdout"
|
||||
- "'etcd-1 Healthy' in cmd_result.stdout"
|
||||
- "'etcd-2 Healthy' in cmd_result.stdout"
|
||||
51
roles/kubernetes/templates/kube-apiserver.service.j2
Normal file
51
roles/kubernetes/templates/kube-apiserver.service.j2
Normal file
@@ -0,0 +1,51 @@
|
||||
[Unit]
|
||||
Description=Kubernetes API Server
|
||||
Documentation=https://github.com/kubernetes/kubernetes
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/local/bin/kube-apiserver \
|
||||
--advertise-address={{ ansible_default_ipv4.address }} \
|
||||
--allow-privileged=true \
|
||||
--apiserver-count=3 \
|
||||
--audit-policy-file=/etc/kubernetes/audit-policy.yml \
|
||||
--audit-log-maxage=30 \
|
||||
--audit-log-maxbackup=3 \
|
||||
--audit-log-maxsize=100 \
|
||||
--audit-log-path=/var/log/audit.log \
|
||||
--authorization-mode=Node,RBAC \
|
||||
--bind-address=0.0.0.0 \
|
||||
--client-ca-file=/var/lib/kubernetes/ca.pem \
|
||||
--enable-admission-plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \
|
||||
--etcd-cafile=/var/lib/kubernetes/ca.pem \
|
||||
--etcd-certfile=/var/lib/kubernetes/kubernetes.pem \
|
||||
--etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \
|
||||
--etcd-servers=https://10.0.0.141:2379,https://10.0.0.142:2379,https://10.0.0.143:2379 \
|
||||
--event-ttl=1h \
|
||||
--encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \
|
||||
--kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \
|
||||
--kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \
|
||||
--kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \
|
||||
--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname \
|
||||
--proxy-client-cert-file=/var/lib/kubernetes/front-proxy.pem \
|
||||
--proxy-client-key-file=/var/lib/kubernetes/front-proxy-key.pem \
|
||||
--requestheader-allowed-names=front-proxy-client \
|
||||
--requestheader-client-ca-file=/var/lib/kubernetes/ca.pem\
|
||||
--requestheader-extra-headers-prefix=X-Remote-Extra- \
|
||||
--requestheader-group-headers=X-Remote-Group \
|
||||
--requestheader-username-headers=X-Remote-User \
|
||||
--runtime-config='api/all=true' \
|
||||
--secure-port=6443 \
|
||||
--service-account-issuer=https://10.0.0.140:6443 \
|
||||
--service-account-key-file=/var/lib/kubernetes/service-account.pem \
|
||||
--service-account-signing-key-file=/var/lib/kubernetes/service-account-key.pem \
|
||||
--service-cluster-ip-range=10.32.0.0/24 \
|
||||
--service-node-port-range=30000-32767 \
|
||||
--tls-cert-file=/var/lib/kubernetes/kubernetes.pem \
|
||||
--tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \
|
||||
--v=2
|
||||
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,24 @@
|
||||
[Unit]
|
||||
Description=Kubernetes Controller Manager
|
||||
Documentation=https://github.com/kubernetes/kubernetes
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/local/bin/kube-controller-manager \
|
||||
--allocate-node-cidrs=true \
|
||||
--bind-address=0.0.0.0 \
|
||||
--cluster-cidr=10.200.0.0/16 \
|
||||
--cluster-name=kubernetes \
|
||||
--cluster-signing-cert-file=/var/lib/kubernetes/ca.pem \
|
||||
--cluster-signing-key-file=/var/lib/kubernetes/ca-key.pem \
|
||||
--kubeconfig=/var/lib/kubernetes/kube-controller-manager.kubeconfig \
|
||||
--leader-elect=true \
|
||||
--root-ca-file=/var/lib/kubernetes/ca.pem \
|
||||
--service-account-private-key-file=/var/lib/kubernetes/service-account-key.pem \
|
||||
--service-cluster-ip-range=10.32.0.0/24 \
|
||||
--use-service-account-credentials=true \
|
||||
--v=2
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
13
roles/kubernetes/templates/kube-scheduler.service.j2
Normal file
13
roles/kubernetes/templates/kube-scheduler.service.j2
Normal file
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=Kubernetes Scheduler
|
||||
Documentation=https://github.com/kubernetes/kubernetes
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/local/bin/kube-scheduler \
|
||||
--config=/etc/kubernetes/config/kube-scheduler.yml \
|
||||
--v=2
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
4
roles/kubernetes/vars/main.yml
Normal file
4
roles/kubernetes/vars/main.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
|
||||
kubernetes_version: "v1.26.0"
|
||||
kubernetes_download_path: "https://dl.k8s.io/{{ kubernetes_version }}/bin/linux/amd64"
|
||||
Reference in New Issue
Block a user