2015-12-11 10:52:20 +00:00
|
|
|
apiVersion: v1
|
|
|
|
kind: Pod
|
|
|
|
metadata:
|
|
|
|
name: kube-apiserver
|
2018-03-30 11:29:13 +00:00
|
|
|
namespace: kube-system
|
2016-11-09 13:15:27 +00:00
|
|
|
labels:
|
|
|
|
k8s-app: kube-apiserver
|
2017-06-16 17:25:46 +00:00
|
|
|
kubespray: v2
|
2017-09-01 06:02:23 +00:00
|
|
|
annotations:
|
2017-09-13 18:00:51 +00:00
|
|
|
kubespray.etcd-cert/serial: "{{ etcd_client_cert_serial }}"
|
2017-09-01 06:02:23 +00:00
|
|
|
kubespray.apiserver-cert/serial: "{{ apiserver_cert_serial }}"
|
2015-12-11 10:52:20 +00:00
|
|
|
spec:
|
|
|
|
hostNetwork: true
|
2017-03-28 14:33:07 +00:00
|
|
|
{% if kube_version | version_compare('v1.6', '>=') %}
|
2017-04-20 09:07:34 +00:00
|
|
|
dnsPolicy: ClusterFirst
|
2017-03-28 14:33:07 +00:00
|
|
|
{% endif %}
|
2015-12-11 10:52:20 +00:00
|
|
|
containers:
|
|
|
|
- name: kube-apiserver
|
2015-12-14 08:54:58 +00:00
|
|
|
image: {{ hyperkube_image_repo }}:{{ hyperkube_image_tag }}
|
2016-11-22 15:16:04 +00:00
|
|
|
imagePullPolicy: {{ k8s_image_pull_policy }}
|
2016-12-23 14:44:44 +00:00
|
|
|
resources:
|
|
|
|
limits:
|
|
|
|
cpu: {{ kube_apiserver_cpu_limit }}
|
|
|
|
memory: {{ kube_apiserver_memory_limit }}
|
|
|
|
requests:
|
|
|
|
cpu: {{ kube_apiserver_cpu_requests }}
|
|
|
|
memory: {{ kube_apiserver_memory_requests }}
|
2015-12-11 10:52:20 +00:00
|
|
|
command:
|
|
|
|
- /hyperkube
|
|
|
|
- apiserver
|
2018-08-15 08:41:13 +00:00
|
|
|
{% if kubernetes_audit %}
|
|
|
|
- --audit-log-path={{ audit_log_path }}
|
|
|
|
- --audit-log-maxage={{ audit_log_maxage }}
|
|
|
|
- --audit-log-maxbackup={{ audit_log_maxbackups }}
|
|
|
|
- --audit-log-maxsize={{ audit_log_maxsize }}
|
|
|
|
- --audit-policy-file={{ audit_policy_file }}
|
|
|
|
{% endif %}
|
2016-05-22 18:44:17 +00:00
|
|
|
- --advertise-address={{ ip | default(ansible_default_ipv4.address) }}
|
2017-10-04 12:27:55 +00:00
|
|
|
- --etcd-servers={{ etcd_access_addresses }}
|
2018-06-18 13:19:12 +00:00
|
|
|
{% if etcd_events_cluster_enabled %}
|
2018-03-01 08:39:14 +00:00
|
|
|
- --etcd-servers-overrides=/events#{{ etcd_events_access_addresses }}
|
|
|
|
{% endif %}
|
2018-01-31 20:49:52 +00:00
|
|
|
{% if kube_version | version_compare('v1.9', '<') %}
|
2016-10-04 15:31:42 +00:00
|
|
|
- --etcd-quorum-read=true
|
2018-01-31 20:49:52 +00:00
|
|
|
{% endif %}
|
2016-11-09 10:44:41 +00:00
|
|
|
- --etcd-cafile={{ etcd_cert_dir }}/ca.pem
|
2016-12-13 09:03:35 +00:00
|
|
|
- --etcd-certfile={{ etcd_cert_dir }}/node-{{ inventory_hostname }}.pem
|
|
|
|
- --etcd-keyfile={{ etcd_cert_dir }}/node-{{ inventory_hostname }}-key.pem
|
2018-09-06 11:46:09 +00:00
|
|
|
{% if kube_apiserver_insecure_port|string != "0" %}
|
2016-07-13 15:13:47 +00:00
|
|
|
- --insecure-bind-address={{ kube_apiserver_insecure_bind_address }}
|
2018-09-06 11:46:09 +00:00
|
|
|
{% endif %}
|
2017-11-29 15:24:02 +00:00
|
|
|
- --bind-address={{ kube_apiserver_bind_address }}
|
2016-07-13 15:13:47 +00:00
|
|
|
- --apiserver-count={{ kube_apiserver_count }}
|
2018-03-20 12:19:53 +00:00
|
|
|
{% if kube_version | version_compare('v1.9', '>=') %}
|
2018-03-20 12:06:34 +00:00
|
|
|
- --endpoint-reconciler-type=lease
|
2018-03-20 12:19:53 +00:00
|
|
|
{% endif %}
|
2018-08-02 18:10:40 +00:00
|
|
|
{% if kube_version | version_compare('v1.10', '<') %}
|
2017-04-17 02:03:45 +00:00
|
|
|
- --admission-control={{ kube_apiserver_admission_control | join(',') }}
|
2018-08-02 18:10:40 +00:00
|
|
|
{% else %}
|
2018-08-06 18:50:48 +00:00
|
|
|
{% if kube_apiserver_enable_admission_plugins|length > 0 %}
|
2018-08-03 18:58:03 +00:00
|
|
|
- --enable-admission-plugins={{ kube_apiserver_enable_admission_plugins | join(',') }}
|
2018-08-06 18:50:48 +00:00
|
|
|
{% endif %}
|
|
|
|
{% if kube_apiserver_disable_admission_plugins|length > 0 %}
|
2018-08-03 18:58:03 +00:00
|
|
|
- --disable-admission-plugins={{ kube_apiserver_disable_admission_plugins | join(',') }}
|
2018-08-06 18:50:48 +00:00
|
|
|
{% endif %}
|
2018-08-02 18:10:40 +00:00
|
|
|
{% endif %}
|
2015-12-11 10:52:20 +00:00
|
|
|
- --service-cluster-ip-range={{ kube_service_addresses }}
|
2016-11-18 12:56:55 +00:00
|
|
|
- --service-node-port-range={{ kube_apiserver_node_port_range }}
|
2015-12-11 10:52:20 +00:00
|
|
|
- --client-ca-file={{ kube_cert_dir }}/ca.pem
|
2017-10-15 19:41:17 +00:00
|
|
|
- --profiling=false
|
|
|
|
- --repair-malformed-updates=false
|
|
|
|
- --kubelet-client-certificate={{ kube_cert_dir }}/node-{{ inventory_hostname }}.pem
|
|
|
|
- --kubelet-client-key={{ kube_cert_dir }}/node-{{ inventory_hostname }}-key.pem
|
|
|
|
- --service-account-lookup=true
|
2017-07-12 07:51:12 +00:00
|
|
|
- --kubelet-preferred-address-types={{ kubelet_preferred_address_types }}
|
2017-02-27 13:15:50 +00:00
|
|
|
{% if kube_basic_auth|default(true) %}
|
2015-12-11 10:52:20 +00:00
|
|
|
- --basic-auth-file={{ kube_users_dir }}/known_users.csv
|
2017-02-27 13:15:50 +00:00
|
|
|
{% endif %}
|
2017-01-13 11:03:20 +00:00
|
|
|
- --tls-cert-file={{ kube_cert_dir }}/apiserver.pem
|
|
|
|
- --tls-private-key-file={{ kube_cert_dir }}/apiserver-key.pem
|
2017-02-27 13:15:50 +00:00
|
|
|
{% if kube_token_auth|default(true) %}
|
2016-07-08 09:59:21 +00:00
|
|
|
- --token-auth-file={{ kube_token_dir }}/known_tokens.csv
|
2017-02-27 13:15:50 +00:00
|
|
|
{% endif %}
|
2018-03-29 14:35:28 +00:00
|
|
|
- --service-account-key-file={{ kube_cert_dir }}/service-account-key.pem
|
2017-02-27 12:24:21 +00:00
|
|
|
{% if kube_oidc_auth|default(false) and kube_oidc_url is defined and kube_oidc_client_id is defined %}
|
|
|
|
- --oidc-issuer-url={{ kube_oidc_url }}
|
|
|
|
- --oidc-client-id={{ kube_oidc_client_id }}
|
2017-03-22 21:25:01 +00:00
|
|
|
{% if kube_oidc_ca_file is defined %}
|
2017-02-27 12:24:21 +00:00
|
|
|
- --oidc-ca-file={{ kube_oidc_ca_file }}
|
|
|
|
{% endif %}
|
2017-03-22 21:25:01 +00:00
|
|
|
{% if kube_oidc_username_claim is defined %}
|
2017-02-27 12:24:21 +00:00
|
|
|
- --oidc-username-claim={{ kube_oidc_username_claim }}
|
|
|
|
{% endif %}
|
2018-04-23 03:17:00 +00:00
|
|
|
{% if kube_oidc_username_prefix is defined %}
|
|
|
|
- "--oidc-username-prefix={{ kube_oidc_username_prefix }}"
|
|
|
|
{% endif %}
|
2017-03-22 21:25:01 +00:00
|
|
|
{% if kube_oidc_groups_claim is defined %}
|
2017-02-27 12:24:21 +00:00
|
|
|
- --oidc-groups-claim={{ kube_oidc_groups_claim }}
|
|
|
|
{% endif %}
|
2018-04-23 03:17:00 +00:00
|
|
|
{% if kube_oidc_groups_prefix is defined %}
|
|
|
|
- "--oidc-groups-prefix={{ kube_oidc_groups_prefix }}"
|
|
|
|
{% endif %}
|
2017-02-27 12:24:21 +00:00
|
|
|
{% endif %}
|
2015-12-11 10:52:20 +00:00
|
|
|
- --secure-port={{ kube_apiserver_port }}
|
2018-09-06 11:46:09 +00:00
|
|
|
{% if kube_apiserver_insecure_port|string != "0" or kube_version | version_compare('v1.10', '<') %}
|
2015-12-15 15:27:12 +00:00
|
|
|
- --insecure-port={{ kube_apiserver_insecure_port }}
|
2018-09-06 11:46:09 +00:00
|
|
|
{% endif %}
|
2017-02-21 14:44:36 +00:00
|
|
|
- --storage-backend={{ kube_apiserver_storage_backend }}
|
2015-12-12 17:24:21 +00:00
|
|
|
{% if kube_api_runtime_config is defined %}
|
|
|
|
{% for conf in kube_api_runtime_config %}
|
|
|
|
- --runtime-config={{ conf }}
|
|
|
|
{% endfor %}
|
2016-10-10 14:09:50 +00:00
|
|
|
{% endif %}
|
2017-03-13 15:04:31 +00:00
|
|
|
{% if enable_network_policy %}
|
2017-10-31 06:43:54 +00:00
|
|
|
{% if kube_version | version_compare('v1.8', '<') %}
|
2016-10-10 14:09:50 +00:00
|
|
|
- --runtime-config=extensions/v1beta1/networkpolicies=true
|
2017-10-31 06:43:54 +00:00
|
|
|
{% endif %}
|
2015-12-12 17:24:21 +00:00
|
|
|
{% endif %}
|
2016-11-25 10:33:39 +00:00
|
|
|
- --v={{ kube_log_level }}
|
2015-12-11 10:52:20 +00:00
|
|
|
- --allow-privileged=true
|
2016-11-07 11:11:16 +00:00
|
|
|
{% if cloud_provider is defined and cloud_provider in ["openstack", "azure", "vsphere"] %}
|
2016-07-08 09:59:21 +00:00
|
|
|
- --cloud-provider={{ cloud_provider }}
|
|
|
|
- --cloud-config={{ kube_config_dir }}/cloud_config
|
2016-08-24 13:48:32 +00:00
|
|
|
{% elif cloud_provider is defined and cloud_provider == "aws" %}
|
2016-08-23 16:42:22 +00:00
|
|
|
- --cloud-provider={{ cloud_provider }}
|
2016-12-13 16:06:53 +00:00
|
|
|
{% endif %}
|
|
|
|
{% if kube_api_anonymous_auth is defined and kube_version | version_compare('v1.5', '>=') %}
|
|
|
|
- --anonymous-auth={{ kube_api_anonymous_auth }}
|
2016-07-08 09:59:21 +00:00
|
|
|
{% endif %}
|
2017-06-27 04:27:25 +00:00
|
|
|
{% if authorization_modes %}
|
|
|
|
- --authorization-mode={{ authorization_modes|join(',') }}
|
|
|
|
{% endif %}
|
2018-03-15 19:20:05 +00:00
|
|
|
{% if kube_encrypt_secret_data %}
|
|
|
|
- --experimental-encryption-provider-config={{ kube_config_dir }}/ssl/secrets_encryption.yaml
|
|
|
|
{% endif %}
|
2017-08-24 20:18:38 +00:00
|
|
|
{% if kube_feature_gates %}
|
|
|
|
- --feature-gates={{ kube_feature_gates|join(',') }}
|
|
|
|
{% endif %}
|
2018-02-09 19:49:49 +00:00
|
|
|
{% if kube_version | version_compare('v1.9', '>=') %}
|
2018-05-11 16:11:38 +00:00
|
|
|
- --requestheader-client-ca-file={{ kube_cert_dir }}/{{ kube_front_proxy_ca }}
|
|
|
|
{# FIXME(mattymo): Vault certs do not work with front-proxy-client #}
|
|
|
|
{% if cert_management == "vault" %}
|
|
|
|
- --requestheader-allowed-names=
|
|
|
|
{% else %}
|
2018-02-07 09:07:46 +00:00
|
|
|
- --requestheader-allowed-names=front-proxy-client
|
2018-05-11 16:11:38 +00:00
|
|
|
{% endif %}
|
2018-02-07 08:50:08 +00:00
|
|
|
- --requestheader-extra-headers-prefix=X-Remote-Extra-
|
2018-02-05 19:37:06 +00:00
|
|
|
- --requestheader-group-headers=X-Remote-Group
|
|
|
|
- --requestheader-username-headers=X-Remote-User
|
2018-02-07 08:50:08 +00:00
|
|
|
- --enable-aggregator-routing={{ kube_api_aggregator_routing }}
|
|
|
|
- --proxy-client-cert-file={{ kube_cert_dir }}/front-proxy-client.pem
|
|
|
|
- --proxy-client-key-file={{ kube_cert_dir }}/front-proxy-client-key.pem
|
2018-04-10 15:10:48 +00:00
|
|
|
{% else %}
|
|
|
|
- --proxy-client-cert-file={{ kube_cert_dir }}/apiserver.pem
|
|
|
|
- --proxy-client-key-file={{ kube_cert_dir }}/apiserver-key.pem
|
2018-02-05 19:37:06 +00:00
|
|
|
{% endif %}
|
2017-04-17 15:09:34 +00:00
|
|
|
{% if apiserver_custom_flags is string %}
|
|
|
|
- {{ apiserver_custom_flags }}
|
2017-04-17 16:13:39 +00:00
|
|
|
{% else %}
|
2018-02-12 07:29:46 +00:00
|
|
|
{% for flag in apiserver_custom_flags %}
|
2017-04-14 21:33:04 +00:00
|
|
|
- {{ flag }}
|
2018-02-12 07:29:46 +00:00
|
|
|
{% endfor %}
|
2016-07-08 09:59:21 +00:00
|
|
|
{% endif %}
|
2016-11-21 12:11:47 +00:00
|
|
|
livenessProbe:
|
|
|
|
httpGet:
|
|
|
|
host: 127.0.0.1
|
|
|
|
path: /healthz
|
2018-02-22 13:00:32 +00:00
|
|
|
{% if kube_apiserver_insecure_port|int == 0 %}
|
2017-11-06 20:01:10 +00:00
|
|
|
port: {{ kube_apiserver_port }}
|
|
|
|
scheme: HTTPS
|
|
|
|
{% else %}
|
2017-06-06 16:36:04 +00:00
|
|
|
port: {{ kube_apiserver_insecure_port }}
|
2017-11-06 20:01:10 +00:00
|
|
|
{% endif %}
|
|
|
|
failureThreshold: 8
|
|
|
|
initialDelaySeconds: 15
|
|
|
|
periodSeconds: 10
|
|
|
|
successThreshold: 1
|
|
|
|
timeoutSeconds: 15
|
2015-12-11 10:52:20 +00:00
|
|
|
volumeMounts:
|
|
|
|
- mountPath: {{ kube_config_dir }}
|
|
|
|
name: kubernetes-config
|
|
|
|
readOnly: true
|
2017-08-30 19:41:09 +00:00
|
|
|
- mountPath: /etc/ssl
|
2015-12-11 10:52:20 +00:00
|
|
|
name: ssl-certs-host
|
|
|
|
readOnly: true
|
2017-08-30 19:41:09 +00:00
|
|
|
{% for dir in ssl_ca_dirs %}
|
|
|
|
- mountPath: {{ dir }}
|
|
|
|
name: {{ dir | regex_replace('^/(.*)$', '\\1' ) | regex_replace('/', '-') }}
|
|
|
|
readOnly: true
|
|
|
|
{% endfor %}
|
2016-11-09 10:44:41 +00:00
|
|
|
- mountPath: {{ etcd_cert_dir }}
|
|
|
|
name: etcd-certs
|
|
|
|
readOnly: true
|
2017-05-31 12:24:24 +00:00
|
|
|
{% if cloud_provider is defined and cloud_provider == 'aws' and ansible_os_family == 'RedHat' %}
|
2017-05-26 21:32:50 +00:00
|
|
|
- mountPath: /etc/ssl/certs/ca-bundle.crt
|
|
|
|
name: rhel-ca-bundle
|
|
|
|
readOnly: true
|
2018-08-15 08:41:13 +00:00
|
|
|
{% endif %}
|
|
|
|
{% if kubernetes_audit %}
|
2018-08-16 10:51:09 +00:00
|
|
|
{% if audit_log_path != "-" %}
|
2018-08-15 08:41:13 +00:00
|
|
|
- mountPath: {{ audit_log_mountpath }}
|
|
|
|
name: {{ audit_log_name }}
|
|
|
|
Writable: true
|
2018-08-16 10:51:09 +00:00
|
|
|
{% endif %}
|
2018-08-15 08:41:13 +00:00
|
|
|
- mountPath: {{ audit_policy_mountpath }}
|
|
|
|
name: {{ audit_policy_name }}
|
2017-05-26 21:32:50 +00:00
|
|
|
{% endif %}
|
2015-12-11 10:52:20 +00:00
|
|
|
volumes:
|
|
|
|
- hostPath:
|
|
|
|
path: {{ kube_config_dir }}
|
|
|
|
name: kubernetes-config
|
2017-08-30 19:41:09 +00:00
|
|
|
- name: ssl-certs-host
|
|
|
|
hostPath:
|
|
|
|
path: /etc/ssl
|
|
|
|
{% for dir in ssl_ca_dirs %}
|
|
|
|
- name: {{ dir | regex_replace('^/(.*)$', '\\1' ) | regex_replace('/', '-') }}
|
|
|
|
hostPath:
|
|
|
|
path: {{ dir }}
|
|
|
|
{% endfor %}
|
2016-11-09 10:44:41 +00:00
|
|
|
- hostPath:
|
|
|
|
path: {{ etcd_cert_dir }}
|
|
|
|
name: etcd-certs
|
2017-05-31 12:24:24 +00:00
|
|
|
{% if cloud_provider is defined and cloud_provider == 'aws' and ansible_os_family == 'RedHat' %}
|
2017-05-26 21:32:50 +00:00
|
|
|
- hostPath:
|
|
|
|
path: /etc/ssl/certs/ca-bundle.crt
|
|
|
|
name: rhel-ca-bundle
|
2017-06-06 16:36:04 +00:00
|
|
|
{% endif %}
|
2018-08-15 08:41:13 +00:00
|
|
|
{% if kubernetes_audit %}
|
2018-08-16 10:51:09 +00:00
|
|
|
{% if audit_log_path != "-" %}
|
2018-08-15 08:41:13 +00:00
|
|
|
- hostPath:
|
|
|
|
path: {{ audit_log_hostpath }}
|
|
|
|
name: {{ audit_log_name }}
|
2018-08-16 10:51:09 +00:00
|
|
|
{% endif %}
|
2018-08-15 08:41:13 +00:00
|
|
|
- hostPath:
|
|
|
|
path: {{ audit_policy_hostpath }}
|
|
|
|
name: {{ audit_policy_name }}
|
|
|
|
{% endif %}
|