You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Made a couple of minor wording changes (not strictly 1.8 related).
- Updated references to the default token TTL (was infinite, now 24 hours).
- Added an anchor for `#kubeadm-join` since we reference that in the URL for one of the new warning messages in 1.8.
- Documented the new `--discovery-token-ca-cert-hash` and `--discovery-token-unsafe-skip-ca-verification` flags for `kubeadm join`.
- Added references to the new `--discovery-token-ca-cert-hash` flag in all the default examples.
- Added a new _Security Model_ section that describes the security tradeoffs of the various discovery modes.
- Documented the new `--groups` flag for `kubeadm token create`
- Added a note of caution under _Automating kubeadm_ that references the _Security Models_ section.
- Updated the component version table to drop 1.6 and add 1.8.
The token can either be identified with just an ID or with the entire token
427
462
value. Only the ID is used; the token is still deleted if the secret does not
@@ -460,6 +495,49 @@ started.
460
495
Once the cluster is up, you can grab the admin credentials from the master node
461
496
at `/etc/kubernetes/admin.conf` and use that to talk to the cluster.
462
497
498
+
Note that this style of bootstrap has some relaxed security guarantees because
499
+
it does not allow the root CA hash to be validated with
500
+
`--discovery-token-ca-cert-hash`(since it's not generated when the nodes are
501
+
provisioned). For details, see the [security model](#security-model)
502
+
503
+
## Security model {#security-model}
504
+
The kubeadm discovery system has several options, each with security tradeoffs.
505
+
The right method for your environment depends on how you provision nodes and the
506
+
security expectations you have about your network and node lifecycles.
507
+
508
+
### Token-based discovery with CA pinning
509
+
This is the default mode in Kubernetes 1.8. It allows bootstrapping nodes to
510
+
securely discover a root of trust for the master even if other worker nodes or
511
+
the network are compromised. It's also convenient to execute manually since all
512
+
of the information required fits into a single `kubeadm join` command that is
513
+
easy to copy and paste. The downside of this method is that the CA hash is not
514
+
normally known until the master has been provisioned, which can make it more
515
+
difficult to build automated provisioning tools that use kubeadm.
516
+
517
+
### Token-based discovery without CA pinning
518
+
This was the default in Kubernetes 1.7 and earlier, but comes with some
519
+
important weaknesses to consider. It's still possible in Kubernetes 1.8 and above
520
+
using the `--discovery-token-unsafe-skip-ca-verification` flag. The main
521
+
advantage of this mode is that the token can be generated ahead of time and
522
+
shared with the master and worker nodes, which can then bootstrap in parallel
523
+
without coordination. This allows it to be used in many provisioning scenarios.
524
+
525
+
This mode still prevents many network-level attacks. However, if an attacker is
526
+
able to steal a bootstrap token via some vulnerability, they can use that token
527
+
(along with network-level access) to impersonate the master to other
528
+
bootstrapping nodes. This may or may not be an appropriate tradeoff in your
529
+
environment. Consider using one of the other modes if possible.
530
+
531
+
### File or HTTPS-based discovery
532
+
This provides an out-of-band way to establish a root of trust between the master
533
+
and bootstrapping nodes. It requires that you have some way to carry the
534
+
discovery information from the master to the bootstrapping nodes. This might be
535
+
possible, for example, via your cloud provider or provisioning tool. The
536
+
information in this file is not secret, but HTTPS is required to ensure its
537
+
integrity. Consider using this mode if you are building automated provisioning
538
+
using kubeadm. This mode is less convenient to use manually since the file is
539
+
difficult to copy and paste between nodes.
540
+
463
541
## Use Kubeadm with other CRI runtimes
464
542
465
543
Since [Kubernetes 1.6 release](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#node-components-1), Kubernetes container runtimes have been transferred to using CRI by default. Currently, the build-in container runtime is Docker which is enabled by build-in `dockershim` in `kubelet`.
@@ -492,17 +570,17 @@ the following images are required for the cluster works will be automatically
492
570
pulled by the kubelet if they don't exist locally while `kubeadm init` is initializing
493
571
your master:
494
572
495
-
| Image Name | v1.6 release branch version | v1.7 release branch version
573
+
| Image Name | v1.7 release branch version | v1.8 release branch version
0 commit comments