Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add support for kubelet in standalone mode and TLS auth #1338

Merged
merged 4 commits into from
Feb 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,12 @@ The following settings can be optionally set to customize the node labels and ta

The following settings are optional and allow you to further configure your cluster.
* `settings.kubernetes.cluster-domain`: The DNS domain for this cluster, allowing all Kubernetes-run containers to search this domain before the host's search domains. Defaults to `cluster.local`.
* `settings.kubernetes.standalone-mode`: Whether to run the kubelet in standalone mode, without connecting to an API server. Defaults to `false`.
* `settings.kubernetes.authentication-mode`: Which authentication method the kubelet should use to connect to the API server, and for incoming requests. Defaults to `aws` for AWS variants, and `tls` for other variants.
* `settings.kubernetes.bootstrap-token`: The token to use for [TLS bootstrapping](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/). This is only used with the `tls` authentication mode, and is otherwise ignored.

You can also optionally specify static pods for your node with the following settings.
Static pods can be particularly useful when running in standalone mode.
* `settings.kubernetes.static-pods.<custom identifier>.manifest`: A base64-encoded pod manifest.
* `settings.kubernetes.static-pods.<custom identifier>.enabled`: Whether the static pod is enabled.

Expand Down
7 changes: 6 additions & 1 deletion Release.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,10 @@ version = "1.0.5"
"migrate_v1.0.5_add-proxy-restart.lz4",
"migrate_v1.0.5_add-proxy-services.lz4"
]
"(1.0.5, 1.0.6)" = ["migrate_v1.0.6_metricdog-init.lz4", "migrate_v1.0.6_add-static-pods.lz4"]
"(1.0.5, 1.0.6)" = [
"migrate_v1.0.6_metricdog-init.lz4",
"migrate_v1.0.6_add-static-pods.lz4",
"migrate_v1.0.6_kubelet-standalone-tls-settings.lz4",
"migrate_v1.0.6_kubelet-standalone-tls-services.lz4",
]

22 changes: 22 additions & 0 deletions packages/kubernetes-1.15/kubelet-bootstrap-kubeconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
apiVersion: v1
kind: Config
clusters:
- cluster:
{{~#if settings.kubernetes.api-server}}
certificate-authority: "/etc/kubernetes/pki/ca.crt"
server: "{{settings.kubernetes.api-server}}"
{{~/if}}
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet
name: kubelet
current-context: kubelet
users:
- name: kubelet
{{~#if settings.kubernetes.bootstrap-token}}
user:
token: "{{settings.kubernetes.bootstrap-token}}"
{{~/if}}
11 changes: 11 additions & 0 deletions packages/kubernetes-1.15/kubelet-config
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
{{~#if settings.kubernetes.standalone-mode}}
address: 127.0.0.1
authentication:
anonymous:
enabled: true
webhook:
enabled: false
authorization:
mode: AlwaysAllow
{{~else}}
address: 0.0.0.0
authentication:
anonymous:
Expand All @@ -15,6 +25,7 @@ authorization:
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
{{~/if}}
clusterDomain: {{settings.kubernetes.cluster-domain}}
clusterDNS:
- {{settings.kubernetes.cluster-dns-ip}}
Expand Down
24 changes: 24 additions & 0 deletions packages/kubernetes-1.15/kubelet-exec-start-conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet \
{{~#unless settings.kubernetes.standalone-mode}}
zmrow marked this conversation as resolved.
Show resolved Hide resolved
--cloud-provider aws \
--kubeconfig /etc/kubernetes/kubelet/kubeconfig \
{{~#if (eq settings.kubernetes.authentication-mode "tls")}}
--bootstrap-kubeconfig /etc/kubernetes/kubelet/bootstrap-kubeconfig \
{{~/if}}
{{~else}}
--cloud-provider "" \
{{~/unless}}
--config /etc/kubernetes/kubelet/config \
--container-runtime=remote \
--container-runtime-endpoint=unix:///run/dockershim.sock \
--containerd=/run/dockershim.sock \
--network-plugin cni \
--root-dir /var/lib/kubelet \
--cert-dir /var/lib/kubelet/pki \
--volume-plugin-dir /var/lib/kubelet/plugins/volume/exec \
--node-ip ${NODE_IP} \
--node-labels "${NODE_LABELS}" \
--register-with-taints "${NODE_TAINTS}" \
--pod-infra-container-image ${POD_INFRA_CONTAINER_IMAGE}
11 changes: 11 additions & 0 deletions packages/kubernetes-1.15/kubelet-kubeconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ apiVersion: v1
kind: Config
clusters:
- cluster:
{{~#if settings.kubernetes.api-server}}
certificate-authority: "/etc/kubernetes/pki/ca.crt"
server: "{{settings.kubernetes.api-server}}"
{{~/if}}
name: kubernetes
contexts:
- context:
Expand All @@ -14,6 +16,8 @@ contexts:
current-context: kubelet
users:
- name: kubelet
{{~#if (eq settings.kubernetes.authentication-mode "aws")}}
{{~#if settings.kubernetes.cluster-name}}
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
Expand All @@ -22,3 +26,10 @@ users:
- token
- "-i"
- "{{settings.kubernetes.cluster-name}}"
{{~/if}}
{{~/if}}
{{~#if (eq settings.kubernetes.authentication-mode "tls")}}
user:
client-certificate: "/var/lib/kubelet/pki/kubelet-client-current.pem"
client-key: "/var/lib/kubelet/pki/kubelet-client-current.pem"
{{~/if}}
17 changes: 2 additions & 15 deletions packages/kubernetes-1.15/kubelet.service
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,8 @@ ExecStartPre=/usr/bin/host-ctr \
--namespace=k8s.io \
pull-image \
--source=${POD_INFRA_CONTAINER_IMAGE}
ExecStart=/usr/bin/kubelet \
--cloud-provider aws \
--config /etc/kubernetes/kubelet/config \
--kubeconfig /etc/kubernetes/kubelet/kubeconfig \
--container-runtime=remote \
--container-runtime-endpoint=unix:///run/dockershim.sock \
--containerd=/run/dockershim.sock \
--network-plugin cni \
--root-dir /var/lib/kubelet \
--cert-dir /var/lib/kubelet/pki \
--volume-plugin-dir /var/lib/kubelet/plugins/volume/exec \
--node-ip ${NODE_IP} \
--node-labels "${NODE_LABELS}" \
--register-with-taints "${NODE_TAINTS}" \
--pod-infra-container-image ${POD_INFRA_CONTAINER_IMAGE}
# Must be overridden by a drop-in file or `kubelet` won't start
ExecStart=/usr/bin/false
zmrow marked this conversation as resolved.
Show resolved Hide resolved

Restart=on-failure
RestartForceExitStatus=SIGPIPE
Expand Down
10 changes: 8 additions & 2 deletions packages/kubernetes-1.15/kubernetes-1.15.spec
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ Source2: kubelet-env
Source3: kubelet-config
Source4: kubelet-kubeconfig
Source5: kubernetes-ca-crt
Source6: kubernetes-tmpfiles.conf
Source6: kubelet-exec-start-conf
Source7: kubelet-bootstrap-kubeconfig
Source8: kubernetes-tmpfiles.conf
Source1000: clarify.toml
Patch1: 0001-always-set-relevant-variables-for-cross-compiling.patch

Expand Down Expand Up @@ -79,9 +81,11 @@ install -m 0644 %{S:2} %{buildroot}%{_cross_templatedir}/kubelet-env
install -m 0644 %{S:3} %{buildroot}%{_cross_templatedir}/kubelet-config
install -m 0644 %{S:4} %{buildroot}%{_cross_templatedir}/kubelet-kubeconfig
install -m 0644 %{S:5} %{buildroot}%{_cross_templatedir}/kubernetes-ca-crt
install -m 0644 %{S:6} %{buildroot}%{_cross_templatedir}/kubelet-exec-start-conf
install -m 0644 %{S:7} %{buildroot}%{_cross_templatedir}/kubelet-bootstrap-kubeconfig

install -d %{buildroot}%{_cross_tmpfilesdir}
install -p -m 0644 %{S:6} %{buildroot}%{_cross_tmpfilesdir}/kubernetes.conf
install -p -m 0644 %{S:8} %{buildroot}%{_cross_tmpfilesdir}/kubernetes.conf

%cross_scan_attribution --clarify %{S:1000} go-vendor vendor

Expand All @@ -95,6 +99,8 @@ install -p -m 0644 %{S:6} %{buildroot}%{_cross_tmpfilesdir}/kubernetes.conf
%{_cross_templatedir}/kubelet-env
%{_cross_templatedir}/kubelet-config
%{_cross_templatedir}/kubelet-kubeconfig
%{_cross_templatedir}/kubelet-bootstrap-kubeconfig
%{_cross_templatedir}/kubelet-exec-start-conf
%{_cross_templatedir}/kubernetes-ca-crt
%{_cross_tmpfilesdir}/kubernetes.conf

Expand Down
2 changes: 2 additions & 0 deletions packages/kubernetes-1.15/kubernetes-ca-crt
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
{{~#if settings.kubernetes.cluster-certificate~}}
{{base64_decode settings.kubernetes.cluster-certificate}}
{{~/if~}}
22 changes: 22 additions & 0 deletions packages/kubernetes-1.16/kubelet-bootstrap-kubeconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
apiVersion: v1
kind: Config
clusters:
- cluster:
{{~#if settings.kubernetes.api-server}}
certificate-authority: "/etc/kubernetes/pki/ca.crt"
server: "{{settings.kubernetes.api-server}}"
{{~/if}}
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet
name: kubelet
current-context: kubelet
users:
- name: kubelet
{{~#if settings.kubernetes.bootstrap-token}}
user:
token: "{{settings.kubernetes.bootstrap-token}}"
{{~/if}}
11 changes: 11 additions & 0 deletions packages/kubernetes-1.16/kubelet-config
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
{{~#if settings.kubernetes.standalone-mode}}
address: 127.0.0.1
authentication:
anonymous:
enabled: true
webhook:
enabled: false
authorization:
mode: AlwaysAllow
{{~else}}
address: 0.0.0.0
authentication:
anonymous:
Expand All @@ -15,6 +25,7 @@ authorization:
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
{{~/if}}
clusterDomain: {{settings.kubernetes.cluster-domain}}
clusterDNS:
- {{settings.kubernetes.cluster-dns-ip}}
Expand Down
24 changes: 24 additions & 0 deletions packages/kubernetes-1.16/kubelet-exec-start-conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet \
{{~#unless settings.kubernetes.standalone-mode}}
--cloud-provider aws \
--kubeconfig /etc/kubernetes/kubelet/kubeconfig \
{{~#if (eq settings.kubernetes.authentication-mode "tls")}}
--bootstrap-kubeconfig /etc/kubernetes/kubelet/bootstrap-kubeconfig \
{{~/if}}
{{~else}}
--cloud-provider "" \
{{~/unless}}
--config /etc/kubernetes/kubelet/config \
--container-runtime=remote \
--container-runtime-endpoint=unix:///run/dockershim.sock \
--containerd=/run/dockershim.sock \
--network-plugin cni \
--root-dir /var/lib/kubelet \
--cert-dir /var/lib/kubelet/pki \
--volume-plugin-dir /var/lib/kubelet/plugins/volume/exec \
--node-ip ${NODE_IP} \
--node-labels "${NODE_LABELS}" \
--register-with-taints "${NODE_TAINTS}" \
--pod-infra-container-image ${POD_INFRA_CONTAINER_IMAGE}
11 changes: 11 additions & 0 deletions packages/kubernetes-1.16/kubelet-kubeconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ apiVersion: v1
kind: Config
clusters:
- cluster:
{{~#if settings.kubernetes.api-server}}
certificate-authority: "/etc/kubernetes/pki/ca.crt"
server: "{{settings.kubernetes.api-server}}"
{{~/if}}
name: kubernetes
contexts:
- context:
Expand All @@ -14,6 +16,8 @@ contexts:
current-context: kubelet
users:
- name: kubelet
{{~#if (eq settings.kubernetes.authentication-mode "aws")}}
{{~#if settings.kubernetes.cluster-name}}
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
Expand All @@ -22,3 +26,10 @@ users:
- token
- "-i"
- "{{settings.kubernetes.cluster-name}}"
{{~/if}}
{{~/if}}
{{~#if (eq settings.kubernetes.authentication-mode "tls")}}
user:
client-certificate: "/var/lib/kubelet/pki/kubelet-client-current.pem"
client-key: "/var/lib/kubelet/pki/kubelet-client-current.pem"
{{~/if}}
17 changes: 2 additions & 15 deletions packages/kubernetes-1.16/kubelet.service
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,8 @@ ExecStartPre=/usr/bin/host-ctr \
--namespace=k8s.io \
pull-image \
--source=${POD_INFRA_CONTAINER_IMAGE}
ExecStart=/usr/bin/kubelet \
--cloud-provider aws \
--config /etc/kubernetes/kubelet/config \
--kubeconfig /etc/kubernetes/kubelet/kubeconfig \
--container-runtime=remote \
--container-runtime-endpoint=unix:///run/dockershim.sock \
--containerd=/run/dockershim.sock \
--network-plugin cni \
--root-dir /var/lib/kubelet \
--cert-dir /var/lib/kubelet/pki \
--volume-plugin-dir /var/lib/kubelet/plugins/volume/exec \
--node-ip ${NODE_IP} \
--node-labels "${NODE_LABELS}" \
--register-with-taints "${NODE_TAINTS}" \
--pod-infra-container-image ${POD_INFRA_CONTAINER_IMAGE}
# Must be overridden by a drop-in file or `kubelet` won't start
ExecStart=/usr/bin/false

Restart=on-failure
RestartForceExitStatus=SIGPIPE
Expand Down
10 changes: 8 additions & 2 deletions packages/kubernetes-1.16/kubernetes-1.16.spec
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ Source2: kubelet-env
Source3: kubelet-config
Source4: kubelet-kubeconfig
Source5: kubernetes-ca-crt
Source6: kubernetes-tmpfiles.conf
Source6: kubelet-exec-start-conf
Source7: kubelet-bootstrap-kubeconfig
Source8: kubernetes-tmpfiles.conf
Source1000: clarify.toml
Patch1: 0001-always-set-relevant-variables-for-cross-compiling.patch

Expand Down Expand Up @@ -75,9 +77,11 @@ install -m 0644 %{S:2} %{buildroot}%{_cross_templatedir}/kubelet-env
install -m 0644 %{S:3} %{buildroot}%{_cross_templatedir}/kubelet-config
install -m 0644 %{S:4} %{buildroot}%{_cross_templatedir}/kubelet-kubeconfig
install -m 0644 %{S:5} %{buildroot}%{_cross_templatedir}/kubernetes-ca-crt
install -m 0644 %{S:6} %{buildroot}%{_cross_templatedir}/kubelet-exec-start-conf
install -m 0644 %{S:7} %{buildroot}%{_cross_templatedir}/kubelet-bootstrap-kubeconfig

install -d %{buildroot}%{_cross_tmpfilesdir}
install -p -m 0644 %{S:6} %{buildroot}%{_cross_tmpfilesdir}/kubernetes.conf
install -p -m 0644 %{S:8} %{buildroot}%{_cross_tmpfilesdir}/kubernetes.conf

%cross_scan_attribution --clarify %{S:1000} go-vendor vendor

Expand All @@ -91,6 +95,8 @@ install -p -m 0644 %{S:6} %{buildroot}%{_cross_tmpfilesdir}/kubernetes.conf
%{_cross_templatedir}/kubelet-env
%{_cross_templatedir}/kubelet-config
%{_cross_templatedir}/kubelet-kubeconfig
%{_cross_templatedir}/kubelet-bootstrap-kubeconfig
%{_cross_templatedir}/kubelet-exec-start-conf
%{_cross_templatedir}/kubernetes-ca-crt
%{_cross_tmpfilesdir}/kubernetes.conf

Expand Down
2 changes: 2 additions & 0 deletions packages/kubernetes-1.16/kubernetes-ca-crt
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
{{~#if settings.kubernetes.cluster-certificate~}}
{{base64_decode settings.kubernetes.cluster-certificate}}
{{~/if~}}
22 changes: 22 additions & 0 deletions packages/kubernetes-1.17/kubelet-bootstrap-kubeconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
apiVersion: v1
kind: Config
clusters:
- cluster:
{{~#if settings.kubernetes.api-server}}
certificate-authority: "/etc/kubernetes/pki/ca.crt"
server: "{{settings.kubernetes.api-server}}"
{{~/if}}
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet
name: kubelet
current-context: kubelet
users:
- name: kubelet
{{~#if settings.kubernetes.bootstrap-token}}
user:
token: "{{settings.kubernetes.bootstrap-token}}"
{{~/if}}
Loading