Commit Graph

168 Commits

Author SHA1 Message Date
John Gardiner Myers 3282549577 Issue kubelet cert on apiserver nodes for k8s before 1.19 2021-07-16 10:13:20 -07:00
John Gardiner Myers 191df58267 Verify CA keypair IDs for kops-controller-issued certs 2021-07-14 08:15:28 -07:00
John Gardiner Myers 68041a4f73 Issue certs using CA KeypairID in NodeupConfig 2021-07-10 23:23:12 -07:00
John Gardiner Myers 1752f0f4db Move most of nodeup.Config out of userdata 2021-06-25 22:25:49 -07:00
John Gardiner Myers b45c0b4489 Remove InstanceGroup from NodeupModelContext 2021-06-03 21:27:01 -07:00
John Gardiner Myers d3469d6ec2 Remove code for no-longer-supported k8s versions 2021-05-07 23:40:03 -07:00
Ole Markus With df2f66e1e5 Make API servers provision themselves.
API servers also have access to secret store, so there is no need to go through kops-controller.
This lets API server only depend on etcd from the CP nodes, which should make it easier to scale out API servers under pressure
2021-04-23 06:59:15 +02:00
Ole Markus With 769c6e584f Add install section to kubelet unit 2021-04-19 19:19:46 +02:00
Ole Markus With af92896dc7 Don't start kubelet if we are warming 2021-04-14 11:05:50 +02:00
Ole Markus With bd731ce989 Use secure kubelet auth
Without secure node auth enabled, commands like `kubectl logs` may fail
with certain configurations.

Previously, we checked if anonymousAuth was enabled on the kubelet
before securing node communication, but this isn't really relevant. We
can still authenticate even if anonymous access is allowed.
2021-04-13 08:59:39 +02:00
Ole Markus With 20bd724f5e Add support for scaling out the control plane with dedicated apiserver nodes
Ensure apiserver role can only be used on AWS (because of firewalling)

Apply api-server label to CP as well

Consolidate node not ready validation message

Guard apiserver nodes with a feature flag

Rename Apiserver role to APIServer

Add an integration test for apiserver nodes

Rename Apiserver role to APIServer

Enumerate all roles in rolling update docs

Apply suggestions from code review

Co-authored-by: Steven E. Harris <seh@panix.com>
2021-03-20 20:57:00 +01:00
Kubernetes Prow Robot 4ee8936d63
Merge pull request #10547 from justinsb/cos_var_lib_kubelet
COS/GCE: exec on kubelet/flexvolume dirs
2021-01-10 08:23:17 -08:00
Justin Santa Barbara e9f6623a80 COS/GCE: exec on kubelet/flexvolume dirs
Upstream bind mounts /var/lib/kubelet with exec, dev and suid
permissions, because emptyDirs end up inheriting these permissions.

Similarly, /home/kubernetes/flexvolume needs exec permission to
support flexdrivers.
2021-01-09 13:56:18 -05:00
Justin Santa Barbara 78b139465c Refactor and centralize distribution logic
Use of a struct makes it more sustainable, centralizing into the
distribution package makes it simpler to follow.
2021-01-05 11:50:23 -05:00
Justin SB b17e44b709 Recognize ubuntu 20.10
Teach nodeup about ubuntu 20.10, including the unusual
/etc/resolv.conf configuration.
2021-01-05 10:53:40 -05:00
Ole Markus With 1525ccdee9 Fix circular dependency in tasks related to kubelet serving cert 2020-10-24 09:02:41 +02:00
Ole Markus With 466dcd001e Apply suggestions from code review
Co-authored-by: John Gardiner Myers <jgmyers@proofpoint.com>
2020-10-09 08:27:08 +02:00
Ole Markus With 809aa93634 Make use of kubelet service certificate 2020-10-09 08:27:08 +02:00
Ciprian Hacman 07ffd665a7 Allow container runtime to run before BootstrapKubeconfig 2020-09-12 08:13:40 +03:00
Ciprian Hacman 22ec1512dc Use numbers for distribution names 2020-08-17 07:25:43 +03:00
Ciprian Hacman e68ee80a93 Move and rename the "distros" package 2020-08-17 07:25:43 +03:00
Peter Rifel 4d9f0128a3
Upgrade to klog2
This splits up the kubernetes 1.19 PR to make it easier to keep up to date until we get it sorted out.
2020-08-16 20:56:48 -05:00
John Gardiner Myers fb381c4c8b Don't issue kubelet cert on masters before k8s 1.19 2020-08-15 10:30:21 -07:00
John Gardiner Myers c5871df319 Get kubelet certificate from kops-controller 2020-08-15 10:30:20 -07:00
John Gardiner Myers e405d24f8c Default kubelet authenticationTokenWebhook to true for k8s 1.19+ 2020-08-14 11:57:56 -07:00
John Gardiner Myers d2e7e2a41d Default kubelet authorization-mode to Webhook for k8s 1.19+ 2020-08-08 21:00:48 -07:00
Kubernetes Prow Robot 7a61e9f07a
Merge pull request #9403 from hakman/protokube-distroless
Use distroless image as base for Protokube
2020-07-12 20:32:34 -07:00
Justin SB 6cdf9d5001 Don't start kubelet in protokube
Previously as an optimization we would start the kubelet from
protokube, after we had mounted the disks.  This helped avoid e.g. the
apiserver going into backoff waiting for etcd.

However, this no longer achieves anything with etcd-manager - nothing
happens on this front until after we start the kubelet anyway.

Doing this both takes protokube out of the dependency sequence here
(slightly faster boot time), but also removes the systemd dependency
from the protokube image.  (So we can get a smaller image, perhaps
even distroless)
2020-07-05 14:41:29 +03:00
Ciprian Hacman 69511a998e Use kubelet docker-specific flags only for Docker 2020-07-05 07:57:10 +03:00
John Gardiner Myers 75ca231693 Move default machine type to NodeupConfig 2020-06-28 18:52:04 -07:00
John Gardiner Myers 44fb283e3f Move NodeLabels into the NodeupConfig 2020-06-28 18:52:03 -07:00
John Gardiner Myers 1ba0f0d463 Move Taints into the NodeupConfig 2020-06-28 18:51:42 -07:00
John Gardiner Myers 5e5f25703d Move KubeletConfig into the NodeupConfig 2020-06-28 18:51:16 -07:00
John Gardiner Myers 8a2dfeb377 Refactor buildMasterKubeletKubeconfig 2020-06-16 21:37:56 -07:00
Peter Rifel bc074e857c
Use ec2.DescribeInstanceTypes in awsup.GetMachineTypeInfo
This requires passing a cloud object in additional places throughout the validation package and originating mostly from cmd/kops

This means that some kops commands now require valid cloud provider credentials, but I don't think this is an issue because the vast majority of use-cases already require the same cloud provider credentials in order to interact with the state store.
2020-06-09 10:13:01 -05:00
ZouYu 2fc52ec6be fix some go-lint warning
Signed-off-by: ZouYu <zouy.fnst@cn.fujitsu.com>
2020-06-09 08:52:50 +08:00
Kubernetes Prow Robot d18e97140e
Merge pull request #9130 from johngmyers/pki-refactor
Refactor cert issuance code
2020-06-05 01:43:43 -07:00
John Gardiner Myers e88e0cf7ec Remove code supporting dropped k8s versions 2020-06-04 12:11:51 -07:00
John Gardiner Myers d64e760d5b Use pki.IssueCert() for nodeup client certs 2020-06-04 10:26:45 -07:00
John Gardiner Myers 2c02f0812c Upgrade docker/containerd/containeros hashes to SHA256 2020-05-29 21:12:36 -07:00
Kubernetes Prow Robot 6830cf6d44
Merge pull request #9065 from johngmyers/remove-distro
Remove support for CoreOS and Jessie
2020-05-27 23:22:01 -07:00
Ole Markus With d1ff25bb4e Remove some rather long networking nil checks 2020-05-22 08:08:58 +02:00
John Gardiner Myers 06c6ac1bee Remove support for CoreOS and Jessie 2020-05-04 23:09:52 -07:00
Ciprian Hacman 95ab317c8a Don't install static utils for Flatcar 2020-04-25 14:59:55 +03:00
Ciprian Hacman 17bb98b7d7 Add support for Ubuntu 20.04 (Focal) 2020-03-11 06:49:02 +02:00
Ciprian Hacman 162761cd64 Fix DNS loop on Ubuntu 18.04 (Bionic) 2020-01-16 18:25:19 +02:00
John Gardiner Myers 6e9dc8fc0f Remove code for unsupported k8s versions from nodeup 2020-01-12 19:30:34 -08:00
Ciprian Hacman d35977ac90 Update hardcoded dependencies on on docker.service 2019-12-29 04:43:40 +02:00
Kubernetes Prow Robot 4621df3c0a
Merge pull request #8155 from hakman/staticcheck-nodeup
nodeup/pkg/model - fix static check
2019-12-20 00:15:32 -08:00
Ciprian Hacman fa665943ac nodeup/pkg/model - fix static check 2019-12-18 22:07:31 +02:00
Ciprian Hacman ce9ed2e1fb Make sure Cluster.Spec.Containerd exists before checking the address 2019-12-16 15:26:52 +02:00
Ciprian Hacman 59ab0ca9d0 Pass containerd --address flag to kubelet if it exists 2019-12-16 00:59:26 +02:00
Ciprian Hacman 42b73b877d Add support for containerd container runtime 2019-12-15 21:37:57 +02:00
Salvatore Mazzarino f6908656bf Fix volume plugins dir
Signed-off-by: Salvatore Mazzarino <dev@mazzarino.cz>
2019-11-24 16:35:23 +01:00
Kubernetes Prow Robot 0c66a304c3
Merge pull request #7754 from tanjunchen/fix-up-gosimple-error
fix-up gosimple check error
2019-10-12 11:18:44 -07:00
liranp c6eb29a4b5
fix(nodeup): miscalculated `max-pods` when using amazon-vpc-cni 2019-10-10 12:02:12 +03:00
tanjunchen 43bf6bdab6 fix-up gosimple check error 2019-10-07 11:59:57 +08:00
Justin SB 728e582360
Fill out kops controller functionality
k8s 1.16 requires that we move label setting away from the kubelet, to
a central controller.  kops-controller is that controller.
2019-09-25 12:04:34 -04:00
mikesplain 9e55b8230a Update copyright notices
Also cleans some white spaces
2019-09-09 14:47:51 -04:00
Justin SB 8e2dbb6a99
Bootstrap: protokube labels its own node with node-role label
As of k8s 1.16, the node-role label is protected for security reasons.
We will introduce a controller to set those labels generically.
However, we need these labels to run the controller (only) on master
nodes.

To solve this bootstrapping problem, we use protokube to apply the
master role node labels to the master node only.  This isn't a
security problem because we assume that protokube on the master is
highly trusted - we are still administering labels centrally.

Then kops-controller can use this label to target the master nodes,
and run a central label controller.
2019-09-08 20:51:00 -04:00
Justin SB 810c65eb46
Copy well-known users from apiserver
This should eliminate the dependency on k8s.io/apiserver
2019-08-31 08:50:09 -07:00
Kashif Saadat 4514215656 Set and mount the correct volume plugin dir based on OS 2019-08-01 17:54:08 +01:00
Kubernetes Prow Robot a8e7109129
Merge pull request #7040 from spotinst/feature-spotinst-ocean
Spotinst: New instance group type: Ocean
2019-06-20 12:24:10 -07:00
liranp 80020052d3
feat(spotinst): new instance group type: ocean 2019-06-03 12:38:46 +03:00
Salvatore Mazzarino c7381f9a34 Flatcar support
Signed-off-by: Salvatore Mazzarino <dev@mazzarino.cz>
2019-05-31 12:20:27 +02:00
Justin SB 3e33ac7682
Change code from glog to klog
We don't call klog.InitFlags yet, because that will cause a flag
redefinition error until we get everyone to stop using glog.  That
will happen when we update to k8s 1.13.
2019-05-06 12:54:51 -04:00
xichengliudui c02802f36d Using const() defines constants together (part:4) 2019-04-20 05:12:51 -04:00
Justin SB de581b1b64
Switch to golang 1.11.5
For cherry-picking to 1.13

https://github.com/kubernetes/kubernetes/blob/release-1.13/build/build-image/cross/Dockerfile
2019-04-20 17:36:56 -04:00
Kubernetes Prow Robot 3b907c81e4
Merge pull request #5982 from justinsb/create_var_lib_kubelet
Always create /var/lib/kubelet, even in bootstrap mode
2019-03-17 04:12:55 -07:00
Alex Williams c928b7e6c5
Use EnsureTask for create static pod directory 2019-03-14 12:22:43 +00:00
Justin SB ecbc34153b
Always create /var/lib/kubelet, even in bootstrap mode
Otherwise we end up with a circular dependency where we don't run the
node-authorizer until /var/lib/kubelet has been bind-mounted, but it
can't be bind-mounted until it exists.

This bind-mounting happens on Google's ContainerOS, which is why it
isn't always seen.
2019-03-14 01:07:52 -04:00
Kubernetes Prow Robot 53189d7e6b
Merge pull request #6210 from mmerrill3/feature/kops-4049
Fixing kops-4049
2019-02-18 02:43:00 -08:00
Derek Lemon -T (delemon - AEROTEK INC at Cisco) 4f0169bb79 codegen 2019-01-16 09:30:40 -07:00
mmerrill3 248f08b467 Fixing kops-4049 2018-12-16 11:59:16 -05:00
Rodrigo Menezes 7231c20f60 ExperimentalAllowedUnsafeSysctls has moved to AllowedUnsafeSysctls in k8s 1.11 2018-12-07 00:20:32 -08:00
Ripta Pasay 7ca6ddc9e0 Replace MaxPods in machine type data with InstanceENIs and InstanceIPsPerENI 2018-11-25 22:35:25 +00:00
Seth Pollack cd63aa5429 set max pods when using aws vpc cni
(cherry picked from commit 92fd86f04a)
2018-11-25 20:45:28 +00:00
mmerrill3 7c4b2a6a5e Setting the manifest directory when it is required by kubelet 2018-11-19 10:04:44 -05:00
SataQiu 0550d8d4e8 fix the typos 2018-10-19 17:35:26 +08:00
k8s-ci-robot 611a343823
Merge pull request #5745 from johanneswuerbach/add-conntrack
Explicitly install conntrack
2018-09-14 09:11:43 -07:00
Johannes Würbach 70ae068945
Explicitly install conntrack 2018-09-04 22:36:02 +02:00
Justin Santa Barbara 76f5ed2d9c Refactor tables package to be more reusable
We still need the reflect helpers, but we allow for clients to
register their own pretty-printers, which avoids the package
dependency for our pretty-printer.  We register our pretty printers in
an init function in the relevant package (in this case,
upup/pkg/fi/printers.go)

Fix #5551
2018-08-02 14:09:05 -04:00
Rodrigo Menezes 74e8973c6c Fix based on Justins suggestion 2018-07-20 12:25:23 -07:00
Rodrigo Menezes e8476499b0 Allow other CNI drivers to bind a hosts Primary IP 2018-07-20 12:16:38 -07:00
k8s-ci-robot 56ccfac26d
Merge pull request #5317 from gambol99/node_registration
Node Authorization Service
2018-07-19 05:17:41 -07:00
Corey O'Brien af5f877a38 Use /bin/bash in kubelet manifest ExecStartPre 2018-07-11 00:04:13 -04:00
Rohith 304d0ce8a9 - consuming the node authorization api spec in nodeup binary
- adding the options builder to fill in the model
- adding the spec into the bootstrap config
2018-07-06 20:14:35 +01:00
Rohith e77000f138 - fixing up the variable name to following a more suitable convention 2018-06-11 21:23:04 +01:00
Rohith d2bae64dd1 - adding the enable-bootstrap-token-auth to the kubeapi and fixing up the various compoents 2018-06-11 09:57:26 +01:00
Rohith 2d5bd2cfd9 - update the IAM policy to ensure the kubelet permision is skipped
- update the PKI to ensure on new clusters the certificate it not created
2018-06-11 09:57:26 +01:00
Rohith 4531384649 This PR attempts to solve two issues
a) The current implementation use's a static kubelet which doesn't not conform to the Node authorization mode (i.e. system:nodes:<nodename>)
b) As present the kubeconfig is static and reused across all the masters and nodes

The PR firstly introduces the ability for users to use bootstrap tokens and secondly when enabled ensure the kubelets for the masters as have unique usernames.  Note, this PR does not attempt to address the distribution of the bootstrap tokens themselves, that's for cluster admins. One solution for this would be a daemonset on the masters running on hostNetwork and reuse dns-controller to annotated the pods and give as the DNS

Notes:
- the master node do not use bootstrap tokens, instead given they have access to the ca anyhow, we generate certificates for each.
- when bootstrap token is not enabled the behaviour will stay the same; i.e. a kubelet configuration brought down from the store.
- when bootstrap tokens are enabled, the Nodes sit in a timeout loop waiting for the configuration to appear (by third party).
- given the nodeup docker and manifests builders are executed before the kubelet builder, the assumption here is a unit file kicks of a custom container to bootstrap the rest.
- the current firewalls on between the master and nodes are fairly open so no need to open ports between the two
- much of the work was ported from @justinsb PR [here](https://github.com/kubernetes/kops/pull/4134/)
- we add a very presumptuous server and client certificates for use with an authorizer (node-bootstrap-internal.dns_zone)

I do have an additional PR which performs the entire thing. The process being a node_authorizer which runs on the master nodes via a daemonset, the service implements a series of authorizers (i.e. alwaysallow, aws, gce etc). For aws, the process is similar to how vault authorizes nodes [here](https://www.vaultproject.io/docs/auth/aws.html). Nodeup no then calls out to the node_authorizer on bootstrap and provisions the kubelet.
2018-06-11 09:56:32 +01:00
Simone Sciarrati e406dbf501 Bind the kubelet to the local ipv4 address if the cni plugin is AmazonVPC - #4218 2018-03-01 17:47:54 +01:00
Justin Santa Barbara 3b983dfabd gce: mounter asset has moved
The mounter asset is now available directly, no longer in
kubernetes-manifests.tar.gz
2018-01-07 17:07:54 -05:00
Justin Santa Barbara 7c695e7d00 Rename flag from network-plugin-dir -> cni-bin-dir
Per https://github.com/kubernetes/kubernetes/pull/53564
2017-10-23 00:54:37 -04:00
Justin Santa Barbara af6a7ef4d8 Containerized mounter fixes per code review 2017-10-08 11:41:09 -04:00
Justin Santa Barbara 3a38d05385 GCE: install containerized mounter on COS
The containerized mounter is a little tricky to install, with lots of
bind mounts.  This code path is only hit on GCE though.
2017-10-08 11:12:37 -04:00
Justin Santa Barbara 3478031533 API types changed package 2017-10-01 14:03:56 -04:00
Justin Santa Barbara df93d82bd8 Use IsKubernetesGTE helper instead of reparsing semver 2017-09-30 21:21:24 -04:00
Blake e845e240ef Fixes reading /root/.docker/config.json on debian
Debian and probably others apparently don't automatically default to using the root account if it's not specified.
2017-08-14 13:08:30 -07:00
Rohith 2fb60b9b3d Kubelet API Certificate
A while back options to permit secure kube-apiserver to kubelet api was https://github.com/kubernetes/kops/pull/2831 using the server.cert and server.key as testing grouns. This PR formalizes the options and generates a client certificate on their behalf (note, the server{.cert,key} can no longer be used post 1.7 as the certificate usage is checked i.e. it's not using a client cert). The users now only need to add anonymousAuth: false to enable secure api to kubelet. I'd like to make this default to all new builds i'm not sure where to place it.

- updated the security.md to reflect the changes
- issue a new client kubelet-api certificate used to secure authorize comms between api and kubelet
- fixed any formatting issues i came across on the journey
2017-08-08 01:11:09 +01:00