forked from hswaw/hscloud
*: k0.hswaw.net somewhat working
parent
f2a812b9fd
commit
de061801db
|
@ -0,0 +1,13 @@
|
||||||
|
HSCloud
|
||||||
|
=======
|
||||||
|
|
||||||
|
This is a monorepo. You'll need bash and Bazel 0.20.0+ to use it.
|
||||||
|
|
||||||
|
Getting started
|
||||||
|
---------------
|
||||||
|
|
||||||
|
cd hscloud
|
||||||
|
. env.sh # setup PATH and hscloud_root
|
||||||
|
tools/install.sh # build tools
|
||||||
|
|
||||||
|
kubectl version
|
22
WORKSPACE
22
WORKSPACE
|
@ -1,3 +1,25 @@
|
||||||
|
# Python rules
|
||||||
|
|
||||||
|
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
|
||||||
|
|
||||||
|
git_repository(
|
||||||
|
name = "io_bazel_rules_python",
|
||||||
|
remote = "https://github.com/bazelbuild/rules_python.git",
|
||||||
|
commit = "ebd7adcbcafcc8abe3fd8e5b0e42e10ced1bfe27",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Python dependencies
|
||||||
|
|
||||||
|
load("@io_bazel_rules_python//python:pip.bzl", "pip_import")
|
||||||
|
|
||||||
|
pip_import(
|
||||||
|
name = "py_deps",
|
||||||
|
requirements = "//:requirements.txt",
|
||||||
|
)
|
||||||
|
|
||||||
|
load("@py_deps//:requirements.bzl", "pip_install")
|
||||||
|
pip_install()
|
||||||
|
|
||||||
# Go rules
|
# Go rules
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
HSCloud Clusters
|
||||||
|
================
|
||||||
|
|
||||||
|
Current cluster: `k0.hswaw.net`
|
||||||
|
|
||||||
|
Accessing via kubectl
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
There isn't yet a service for getting short-term user certificates. Instead, you'll have to get admin certificates:
|
||||||
|
|
||||||
|
clustercfg admincreds $(whoami)-admin
|
||||||
|
kubectl get nodes
|
||||||
|
|
||||||
|
Provisioning nodes
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- bring up a new node with nixos, running the configuration.nix from bootstrap (to be documented)
|
||||||
|
- `clustercfg nodestrap bc01nXX.hswaw.net`
|
||||||
|
|
||||||
|
That's it!
|
|
@ -1,34 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF+jCCA+KgAwIBAgIJAIDxP85du/ccMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
MIIF7zCCA9egAwIBAgIJAIDxP85du/cjMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzAzMzA1
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5MzMx
|
||||||
OFoXDTE5MDIxMjAzMzA1OFowgZ4xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
N1oXDTIwMDExMzE5MzMxN1owgZMxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
d2llY2tpZTEUMBIGA1UEBwwLTWF6b3dpZWNraWUxFTATBgNVBAoMDHN5c3RlbTpu
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExFTATBgNVBAoMDHN5c3RlbTpub2Rl
|
||||||
b2RlczEkMCIGA1UECwwbS3ViZXJuZXRlcyBOb2RlIENlcnRpZmljYXRlMSYwJAYD
|
czEcMBoGA1UECwwTS3ViZWxldCBDZXJ0aWZpY2F0ZTEmMCQGA1UEAwwdc3lzdGVt
|
||||||
VQQDDB1zeXN0ZW06bm9kZTpiYzAxbjAxLmhzd2F3Lm5ldDCCAiIwDQYJKoZIhvcN
|
Om5vZGU6YmMwMW4wMS5oc3dhdy5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
||||||
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
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,34 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF3zCCA8cCCQCA8T/OXbv3GDANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC
|
MIIF1zCCA7+gAwIBAgIJAIDxP85du/ciMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
UEwxFDASBgNVBAgMC01hem93aWVja2llMREwDwYDVQQHDAhXYXJzemF3YTEuMCwG
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
A1UECgwlU3Rvd2FyenlzemVuaWUgV2Fyc3phd3NraSBIYWNrZXJzcGFjZTEQMA4G
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
A1UECwwHaHNjbG91ZDEaMBgGA1UEAwwRQm9vdHN0cmFwIE5vZGUgQ0ExITAfBgkq
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
hkiG9w0BCQEWEnEza0BoYWNrZXJzcGFjZS5wbDAeFw0xOTAxMTMwMzIxNDNaFw0x
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5MzMx
|
||||||
OTAyMTIwMzIxNDNaMIGqMQswCQYDVQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNr
|
NFoXDTIwMDExMzE5MzMxNFowgZ0xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
aWUxFDASBgNVBAcMC01hem93aWVja2llMS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5p
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExLjAsBgNVBAoMJVN0b3dhcnp5c3pl
|
||||||
ZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNlMSMwIQYDVQQLDBpOb2RlIEJvb3RzdHJh
|
bmllIFdhcnN6YXdza2kgSGFja2Vyc3BhY2UxGTAXBgNVBAsMEE5vZGUgQ2VydGlm
|
||||||
cCBDZXJ0aWZpY2F0ZTEaMBgGA1UEAwwRYmMwMW4wMS5oc3dhdy5uZXQwggIiMA0G
|
aWNhdGUxGjAYBgNVBAMMEWJjMDFuMDEuaHN3YXcubmV0MIICIjANBgkqhkiG9w0B
|
||||||
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
|
||||||
gy6l4a49WUmiJlse+3SRGodNww==
|
wxsWLBWehpRMa5o=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,34 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF+jCCA+KgAwIBAgIJAIDxP85du/cdMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
MIIF7zCCA9egAwIBAgIJAIDxP85du/cqMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzAzMzIw
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NTE1
|
||||||
M1oXDTE5MDIxMjAzMzIwM1owgZ4xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
NloXDTIwMDExMzE5NTE1NlowgZMxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
d2llY2tpZTEUMBIGA1UEBwwLTWF6b3dpZWNraWUxFTATBgNVBAoMDHN5c3RlbTpu
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExFTATBgNVBAoMDHN5c3RlbTpub2Rl
|
||||||
b2RlczEkMCIGA1UECwwbS3ViZXJuZXRlcyBOb2RlIENlcnRpZmljYXRlMSYwJAYD
|
czEcMBoGA1UECwwTS3ViZWxldCBDZXJ0aWZpY2F0ZTEmMCQGA1UEAwwdc3lzdGVt
|
||||||
VQQDDB1zeXN0ZW06bm9kZTpiYzAxbjAyLmhzd2F3Lm5ldDCCAiIwDQYJKoZIhvcN
|
Om5vZGU6YmMwMW4wMi5oc3dhdy5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
||||||
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
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIF1zCCA7+gAwIBAgIJAIDxP85du/cpMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NTE1
|
||||||
|
M1oXDTIwMDExMzE5NTE1M1owgZ0xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExLjAsBgNVBAoMJVN0b3dhcnp5c3pl
|
||||||
|
bmllIFdhcnN6YXdza2kgSGFja2Vyc3BhY2UxGTAXBgNVBAsMEE5vZGUgQ2VydGlm
|
||||||
|
aWNhdGUxGjAYBgNVBAMMEWJjMDFuMDIuaHN3YXcubmV0MIICIjANBgkqhkiG9w0B
|
||||||
|
AQEFAAOCAg8AMIICCgKCAgEAy4rQNKn1wqavIg4fEyPSxpC3ZQ8TULE/3VSo38rd
|
||||||
|
vSwb9c1AfNQXYCg2wm2iRk5Zt0EQgE/HHZ/NUvrymH1I/2JNPvlkLY2WlXhtWSiX
|
||||||
|
B44xynS2UHvRC5wYfPUCCFjSylYOhh6N85CZZhv+mJVLWOzbA7jLEa+1THevRUzF
|
||||||
|
MBznkCW9QS3ZCzfZs0Tlb0yVOPKjjYqNsTdfbBhV9m31FUbseg2g7+oaCPFXrxBf
|
||||||
|
Aj+MDo8G2xP0M6QUZ/VXkPDFq0VE2CQBCDr3dbncLZD0hEp6ruuzM6yNzKSXl6G1
|
||||||
|
mfkiupiqHZ784lyrdSyc+yv4TFoJPVi6n/u34k+B3SQXfA6BBsLzqyhJi+dDxP2l
|
||||||
|
Em2HVg5u1hmqV7ZU1BQ7p+ricgJv3xdpzAbVQ2ukw4Hipb8Z8ZKSIsZ0jLPQ6OVh
|
||||||
|
5cambMp3mD7pBDHf6zDehiwhYzIBEXUSVcF7+c+chKnHuav35jw6WJzozCCRilW0
|
||||||
|
W3avCeyqtpIpeT80kt/s6/KxapNt70vZKe7RbRjxGRVBHk5tn5fHO6XRGDGqQ+Jd
|
||||||
|
nHhzaAm8GIoFnNEkJp2BjMywzJTQnY4ZEn+Iut7vpU2F3zgR1KaaACTbc2oe4TrS
|
||||||
|
SXV4zZRlq8HNSdnhxBr9cZIxaqlQG9d3jURQrNZ2d18u2a2nCDJZOYQTRzWqqWhM
|
||||||
|
KBkCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAAHmclBSa+MkJ6pOCWoBSWu8chMlh
|
||||||
|
QCJZqzmhfsrxSnATtfBoa+kyi0qjrXbCUhxmsKCeZjH4zCznd1MwcjL5wwQbS6Lb
|
||||||
|
slH16NqmrCRZF8A9Cy6noFCdl/EuHqoe9kl7cFZ3jyRQ7CXhMxsWDQ+07I5M3cTn
|
||||||
|
1hT1WyLCDU88t677MYeuNGdVIXkhX7lc1glpItX2PEpUrg6cF7ifY774MmwYUoy1
|
||||||
|
2kP1uIZO6TJtuNQPsuWmOxFZjVQ0lBSSSegVquOkE7g7UKMxbooPXPgAL1u7KLbf
|
||||||
|
tlzu/FU3LqiKkn+J8mvDoMm+6wsbPqXgOepnHcEHlWXhEys+Jzbz506qki9uzufE
|
||||||
|
2mdW5b3s72TcgMp03wi6gAZtjsGAaT5v9jmfUBkPkn1aP169BBl8gCnI3yNNiext
|
||||||
|
Zrl/28CL38vekBa/87u2BPy5xPQx+D+Nj6w5amhgAZg1FIyJbmfjup/VwZUpQ7Ac
|
||||||
|
D6h1B0exveRAD1uCPC5pTRO39TqapA07JsfTT5QVxVqpKIZUzIc7+HnaCcpy4dGN
|
||||||
|
4cZXZDPVkrhL8NWqwOeoL6mP9/CG+a6O2LcwiIaSfxSYBvXGCY1A57wATfpd3h8D
|
||||||
|
n9qAX4a54eHMD97CgQqRqGiQEBGMR5B4ipo10Tkz5/95dnso4UKoZdNYmEJ5RV+u
|
||||||
|
woES+ejgN3Q9YX8=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -1,34 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF+jCCA+KgAwIBAgIJAIDxP85du/ceMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
MIIF7zCCA9egAwIBAgIJAIDxP85du/csMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzAzMzIz
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NTIx
|
||||||
MloXDTE5MDIxMjAzMzIzMlowgZ4xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
MFoXDTIwMDExMzE5NTIxMFowgZMxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
d2llY2tpZTEUMBIGA1UEBwwLTWF6b3dpZWNraWUxFTATBgNVBAoMDHN5c3RlbTpu
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExFTATBgNVBAoMDHN5c3RlbTpub2Rl
|
||||||
b2RlczEkMCIGA1UECwwbS3ViZXJuZXRlcyBOb2RlIENlcnRpZmljYXRlMSYwJAYD
|
czEcMBoGA1UECwwTS3ViZWxldCBDZXJ0aWZpY2F0ZTEmMCQGA1UEAwwdc3lzdGVt
|
||||||
VQQDDB1zeXN0ZW06bm9kZTpiYzAxbjAzLmhzd2F3Lm5ldDCCAiIwDQYJKoZIhvcN
|
Om5vZGU6YmMwMW4wMy5oc3dhdy5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
||||||
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
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIF1zCCA7+gAwIBAgIJAIDxP85du/crMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NTIw
|
||||||
|
N1oXDTIwMDExMzE5NTIwN1owgZ0xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExLjAsBgNVBAoMJVN0b3dhcnp5c3pl
|
||||||
|
bmllIFdhcnN6YXdza2kgSGFja2Vyc3BhY2UxGTAXBgNVBAsMEE5vZGUgQ2VydGlm
|
||||||
|
aWNhdGUxGjAYBgNVBAMMEWJjMDFuMDMuaHN3YXcubmV0MIICIjANBgkqhkiG9w0B
|
||||||
|
AQEFAAOCAg8AMIICCgKCAgEAxiuSdlKbh4zsIL3/vJnDX3QE4769lon+N4zxEU6K
|
||||||
|
9N9MjOctys8H9eeeqSvbPW2QD74f3E3CePIndKukalSutZYvKzsW6aivBXIZR7Yq
|
||||||
|
ODjFhfIezN3uFN2rlvCrKrMRIEMvURm1mgDYfU+6kETYodRxbzy5h5vVGkYfFmO3
|
||||||
|
aV8iZExKpwoOtGCp2K8k6ViS7SWgMddUjnfptB/Ge/Huujkejj/kSXIcIFb/9yXB
|
||||||
|
F1eYNGzajPVpP8ervTJFetyULfskGxwsWjFixI3oJVzhstYp2C1uNOuNZdNS11wo
|
||||||
|
pV+RcQdmlIAPe14VxIu2IAXjJ6tgXQEaXx7Veq4HoN7drc5XcKLODL6y65JleXgY
|
||||||
|
MbRuKdCYbKomCRMWXL5ps0vZGHuuBWk9OITobDBYln1z4iO7MeDuXNwea56gsZYa
|
||||||
|
3q37Se7Sj2RqV6hIpYyJqWr/6HbZ4Mb/0wOrm18gpfUdDXGtPG8zFNPFiZhS1VpQ
|
||||||
|
0/UQs63CKu6eBBbJOVme1SjgRN5lyrtnm55nwsquPKDFkT6M7oIrxutFNisX0faQ
|
||||||
|
G8xBYsIICuhZLzBQLilvd9IBnpMw9JgBygircJEOPXlYJ0L9EVLbn6oi+1o/iCjJ
|
||||||
|
YpC0Epm/3skNhCUXgxODJMRP+2jgpxJa3T7ggv7ykgP5zVsFKDTqktX+XYaq7diF
|
||||||
|
MRECAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAMpJiqOvJXOVbdl/fAWfXyNToRTBD
|
||||||
|
nJyRKv9pDa9u9ZiswtwkkKihMD+on6CaKsRQt+1WaYqm9uHZs4D8TEitIdRUjj+d
|
||||||
|
v7j9XHx6uMc9XmWxlDwm1b2Ci2/mqNZVWsDutRfPM5UhnIH+SlpjDqQEN+XaUQGf
|
||||||
|
f5JwtDzAvCPb+ktW51oUqZCjLawAx3mQ/cl3GigZC1CxdfSg1HHC8mN7vIKKkM6q
|
||||||
|
3o9eE3zO4o4UVKENoo7+B4IyhmQu9Qzh1fBO+5k14T/aRIds08skR+wR+SCuG/R4
|
||||||
|
FmBUpXw0qkhLDVEbeMA8BTndFBPHv/nvv6ZjIaaQQ7R+4iKprpriW2ZA4/eegHwI
|
||||||
|
OStwhe8XTHoAkSsIgrlaYH3md20Zmq1YwdxCKDyxPhqBXj6AV65hrwlzLY1H/9IC
|
||||||
|
KMWjKu0s/E7BWGiaegqw47gcPGEKdDc0jdJXmGgfFtTmKBAhphYj/dSirJuJ8q53
|
||||||
|
v/PgkGVb2jntYcBhDhOfbCJANd0ODpoxpnrWiDsNibDrREP0nHWqxuJy3NecNDsi
|
||||||
|
zANRZtlT+TcJ+CRFOW70SA3uwci7RoOEgERdG2VrjinyL3w8r/Q5826ozM89G9I/
|
||||||
|
PiV9N0ALN4y0NHxP/mJoHkfPsR1SkRdQgroFzfBBxTasb88WoD5luz+0ZMoahLIr
|
||||||
|
9lmjupwIX7aPU9g=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -1 +1 @@
|
||||||
80F13FCE5DBBF71E
|
80F13FCE5DBBF72E
|
||||||
|
|
|
@ -1,33 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIFnTCCA4UCCQCA8T/OXbv3FDANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC
|
MIIF0DCCA7igAwIBAgIJAIDxP85du/cnMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
UEwxFDASBgNVBAgMC01hem93aWVja2llMREwDwYDVQQHDAhXYXJzemF3YTEuMCwG
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
A1UECgwlU3Rvd2FyenlzemVuaWUgV2Fyc3phd3NraSBIYWNrZXJzcGFjZTEQMA4G
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
A1UECwwHaHNjbG91ZDEaMBgGA1UEAwwRQm9vdHN0cmFwIE5vZGUgQ0ExITAfBgkq
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
hkiG9w0BCQEWEnEza0BoYWNrZXJzcGFjZS5wbDAeFw0xOTAxMTIyMjA2MjJaFw0x
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NDU0
|
||||||
OTAyMTEyMjA2MjJaMGkxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpvd2llY2tp
|
NVoXDTIwMDExMzE5NDU0NVowgZYxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
ZTEUMBIGA1UEBwwLTWF6b3dpZWNraWUxFzAVBgNVBAoMDkt1YmVybmV0ZXMgQVBJ
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExLjAsBgNVBAoMJVN0b3dhcnp5c3pl
|
||||||
MRUwEwYDVQQDDAxrMC5oc3dhdy5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
bmllIFdhcnN6YXdza2kgSGFja2Vyc3BhY2UxFzAVBgNVBAsMDkt1YmVybmV0ZXMg
|
||||||
ggIKAoICAQCkM3INHpc2gliSsI3BWlHZLMoYc7UGIDvi2rw+t6vygeXMFCVOowL/
|
QVBJMRUwEwYDVQQDDAxrMC5oc3dhdy5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
||||||
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
|
||||||
sg==
|
pm7SxeMmP1c0B28S1wqZAh0mxrD/yUhKA/ZagRktAhCr+CXAgePEqeCZCx0XGqUw
|
||||||
|
d/ZySw==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF9DCCA9wCCQCA8T/OXbv3DjANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC
|
MIIF9DCCA9ygAwIBAgIJAIDxP85du/ckMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
UEwxFDASBgNVBAgMC01hem93aWVja2llMREwDwYDVQQHDAhXYXJzemF3YTEuMCwG
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
A1UECgwlU3Rvd2FyenlzemVuaWUgV2Fyc3phd3NraSBIYWNrZXJzcGFjZTEQMA4G
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
A1UECwwHaHNjbG91ZDEaMBgGA1UEAwwRQm9vdHN0cmFwIE5vZGUgQ0ExITAfBgkq
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
hkiG9w0BCQEWEnEza0BoYWNrZXJzcGFjZS5wbDAeFw0xOTAxMTIyMTI0MTlaFw0x
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NDU0
|
||||||
OTAyMTEyMTI0MTlaMIG/MQswCQYDVQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNr
|
M1oXDTIwMDExMzE5NDU0M1owgboxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
aWUxFDASBgNVBAcMC01hem93aWVja2llMScwJQYDVQQKDB5zeXN0ZW06a3ViZS1j
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExJzAlBgNVBAoMHnN5c3RlbTprdWJl
|
||||||
b250cm9sbGVyLW1hbmFnZXIxMjAwBgNVBAsMKUt1YmVybmV0ZXMgQ29udHJvbGxl
|
LWNvbnRyb2xsZXItbWFuYWdlcjEwMC4GA1UECwwnS3ViZXJuZXRlciBDb21wb25l
|
||||||
ciBNYW5hZ2VyIENlcnRpZmljYXRlMScwJQYDVQQDDB5zeXN0ZW06a3ViZS1jb250
|
bnQgY29udHJvbGxlci1tYW5hZ2VyMScwJQYDVQQDDB5zeXN0ZW06a3ViZS1jb250
|
||||||
cm9sbGVyLW1hbmFnZXIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDH
|
cm9sbGVyLW1hbmFnZXIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDH
|
||||||
NdThV//g0VWj5VX+i/Z0iLjmoxwIJYVcuzLNJwiC3jyhjKfXwo7GjkI03PB0oHmj
|
NdThV//g0VWj5VX+i/Z0iLjmoxwIJYVcuzLNJwiC3jyhjKfXwo7GjkI03PB0oHmj
|
||||||
I/OS15NqCpSbOzLNKfnBk1WjfGfbyiyJbIFWPPWnD/i4mdiKZ5ZS45nYAUqBADs6
|
I/OS15NqCpSbOzLNKfnBk1WjfGfbyiyJbIFWPPWnD/i4mdiKZ5ZS45nYAUqBADs6
|
||||||
|
@ -20,15 +20,15 @@ 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
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,33 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIFyzCCA7MCCQCA8T/OXbv3DzANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC
|
MIIFzTCCA7WgAwIBAgIJAIDxP85du/clMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
UEwxFDASBgNVBAgMC01hem93aWVja2llMREwDwYDVQQHDAhXYXJzemF3YTEuMCwG
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
A1UECgwlU3Rvd2FyenlzemVuaWUgV2Fyc3phd3NraSBIYWNrZXJzcGFjZTEQMA4G
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
A1UECwwHaHNjbG91ZDEaMBgGA1UEAwwRQm9vdHN0cmFwIE5vZGUgQ0ExITAfBgkq
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
hkiG9w0BCQEWEnEza0BoYWNrZXJzcGFjZS5wbDAeFw0xOTAxMTIyMTMwMDFaFw0x
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NDU0
|
||||||
OTAyMTEyMTMwMDFaMIGWMQswCQYDVQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNr
|
M1oXDTIwMDExMzE5NDU0M1owgZMxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
aWUxFDASBgNVBAcMC01hem93aWVja2llMRowGAYDVQQKDBFzeXN0ZW06a3ViZS1w
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExGjAYBgNVBAoMEXN5c3RlbTprdWJl
|
||||||
cm94eTEjMCEGA1UECwwaS3ViZXJuZXRlcyBDb21wb25lbnQgcHJveHkxGjAYBgNV
|
LXByb3h5MSMwIQYDVQQLDBpLdWJlcm5ldGVyIENvbXBvbmVudCBwcm94eTEaMBgG
|
||||||
BAMMEXN5c3RlbTprdWJlLXByb3h5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
|
A1UEAwwRc3lzdGVtOmt1YmUtcHJveHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
||||||
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
|
||||||
|
AQ==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,34 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF1zCCA78CCQCA8T/OXbv3EDANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC
|
MIIF2TCCA8GgAwIBAgIJAIDxP85du/cmMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
UEwxFDASBgNVBAgMC01hem93aWVja2llMREwDwYDVQQHDAhXYXJzemF3YTEuMCwG
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
A1UECgwlU3Rvd2FyenlzemVuaWUgV2Fyc3phd3NraSBIYWNrZXJzcGFjZTEQMA4G
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
A1UECwwHaHNjbG91ZDEaMBgGA1UEAwwRQm9vdHN0cmFwIE5vZGUgQ0ExITAfBgkq
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
hkiG9w0BCQEWEnEza0BoYWNrZXJzcGFjZS5wbDAeFw0xOTAxMTIyMTMwMDZaFw0x
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NDU0
|
||||||
OTAyMTEyMTMwMDZaMIGiMQswCQYDVQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNr
|
NFoXDTIwMDExMzE5NDU0NFowgZ8xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
aWUxFDASBgNVBAcMC01hem93aWVja2llMR4wHAYDVQQKDBVzeXN0ZW06a3ViZS1z
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExHjAcBgNVBAoMFXN5c3RlbTprdWJl
|
||||||
Y2hlZHVsZXIxJzAlBgNVBAsMHkt1YmVybmV0ZXMgQ29tcG9uZW50IHNjaGVkdWxl
|
LXNjaGVkdWxlcjEnMCUGA1UECwweS3ViZXJuZXRlciBDb21wb25lbnQgc2NoZWR1
|
||||||
cjEeMBwGA1UEAwwVc3lzdGVtOmt1YmUtc2NoZWR1bGVyMIICIjANBgkqhkiG9w0B
|
bGVyMR4wHAYDVQQDDBVzeXN0ZW06a3ViZS1zY2hlZHVsZXIwggIiMA0GCSqGSIb3
|
||||||
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
|
||||||
g1RPicE/VHOS/rQ=
|
gBStDZ7N+bB3HknHew==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,33 +1,34 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIFrjCCA5YCCQCA8T/OXbv3FTANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC
|
MIIF5zCCA8+gAwIBAgIJAIDxP85du/coMA0GCSqGSIb3DQEBCwUAMIG3MQswCQYD
|
||||||
UEwxFDASBgNVBAgMC01hem93aWVja2llMREwDwYDVQQHDAhXYXJzemF3YTEuMCwG
|
VQQGEwJQTDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdh
|
||||||
A1UECgwlU3Rvd2FyenlzemVuaWUgV2Fyc3phd3NraSBIYWNrZXJzcGFjZTEQMA4G
|
MS4wLAYDVQQKDCVTdG93YXJ6eXN6ZW5pZSBXYXJzemF3c2tpIEhhY2tlcnNwYWNl
|
||||||
A1UECwwHaHNjbG91ZDEaMBgGA1UEAwwRQm9vdHN0cmFwIE5vZGUgQ0ExITAfBgkq
|
MRAwDgYDVQQLDAdoc2Nsb3VkMRowGAYDVQQDDBFCb290c3RyYXAgTm9kZSBDQTEh
|
||||||
hkiG9w0BCQEWEnEza0BoYWNrZXJzcGFjZS5wbDAeFw0xOTAxMTIyMjA4MTBaFw0x
|
MB8GCSqGSIb3DQEJARYScTNrQGhhY2tlcnNwYWNlLnBsMB4XDTE5MDExMzE5NDU0
|
||||||
OTAyMTEyMjA4MTBaMHoxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpvd2llY2tp
|
NVoXDTIwMDExMzE5NDU0NVowga0xCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpv
|
||||||
ZTEUMBIGA1UEBwwLTWF6b3dpZWNraWUxJDAiBgNVBAoMG0t1YmVybmV0ZXMgU2Vy
|
d2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExLjAsBgNVBAoMJVN0b3dhcnp5c3pl
|
||||||
dmljZSBBY2NvdW50czEZMBcGA1UEAwwQc2VydmljZS1hY2NvdW50czCCAiIwDQYJ
|
bmllIFdhcnN6YXdza2kgSGFja2Vyc3BhY2UxKjAoBgNVBAsMIUt1YmVybmV0ZXMg
|
||||||
KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVIKq5dWNAA1Q0giQYWCyCsIrGoXiBP
|
U2VydmljZSBBY2NvdW50IFNpZ25lcjEZMBcGA1UEAwwQc2VydmljZS1hY2NvdW50
|
||||||
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
|
||||||
7kgCUIUpS2PS4gElXF0QAPJp
|
nFGBYrQhbtKjchdebRbpZ17aVa6J3xYO2pu3/YIy3h+HPsWgv/velvBBafNknWt6
|
||||||
|
0vrLPy6Q8MtE6cC6JAEiIGHJU+PjMBVr3P0b
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
plain
|
|
@ -1,3 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
||||||
!cipher/
|
|
200
env.sh
200
env.sh
|
@ -5,7 +5,7 @@ if [ "$0" == "$BASH_SOURCE" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
hscloud_root="$( cd "$(dirname "$BASH_SOURCE")"; pwd -P )"
|
export hscloud_root="$( cd "$(dirname "$BASH_SOURCE")"; pwd -P )"
|
||||||
|
|
||||||
if [ ! -f "$hscloud_root/WORKSPACE" ]; then
|
if [ ! -f "$hscloud_root/WORKSPACE" ]; then
|
||||||
echo "Could not find WORKSPACE"
|
echo "Could not find WORKSPACE"
|
||||||
|
@ -16,200 +16,6 @@ hscloud_path="$hscloud_root/bazel-bin/tools"
|
||||||
|
|
||||||
[[ ":$PATH:" != *":$hscloud_path:"* ]] && PATH="$hscloud_path:${PATH}"
|
[[ ":$PATH:" != *":$hscloud_path:"* ]] && PATH="$hscloud_path:${PATH}"
|
||||||
|
|
||||||
# legacy crap follows
|
gpg-unlock() {
|
||||||
|
echo "test" | gpg2 --sign --batch --no-tty -o /dev/null
|
||||||
hscloud-dc() {
|
|
||||||
( cd "$hscloud_root" && docker-compose -f "docker/docker-compose.yml" "$@" )
|
|
||||||
}
|
|
||||||
|
|
||||||
hscloud-pki-dev() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cd "$hscloud_root"
|
|
||||||
rm -rf docker/pki
|
|
||||||
|
|
||||||
cp -rv go/pki/dev-certs docker/pki
|
|
||||||
cd docker/pki
|
|
||||||
bash gen.sh m6220-proxy arista-proxy cmc-proxy topo client
|
|
||||||
ls *pem
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Generate a per-node certificate remotely on the node.
|
|
||||||
hscloud-node-remote-cert() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
if [ -z "$1" ] || [ -z "$2" ] || [ -x "$3" ]; then
|
|
||||||
echo >&2 "Usage: hscloud-node-remote-cert node.fqdn.com certname subj"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fqdn="$1"
|
|
||||||
certname="$2"
|
|
||||||
subj="$3"
|
|
||||||
|
|
||||||
echo "Node: ${fqdn}; Cert: ${certname}"
|
|
||||||
|
|
||||||
echo "Checking node livenes..."
|
|
||||||
ssh root@$fqdn uname -a
|
|
||||||
|
|
||||||
echo "Checking if node already has key..."
|
|
||||||
ssh root@$fqdn stat /opt/hscloud/${certname}.key || (
|
|
||||||
echo "Generating key..."
|
|
||||||
ssh root@$fqdn -- mkdir -p /opt/hscloud
|
|
||||||
ssh root@$fqdn -- nix-shell -p openssl --command "\"openssl genrsa -out /opt/hscloud/${certname}.key 4096\""
|
|
||||||
ssh root@$fqdn -- chmod 400 /opt/hscloud/${certname}.key
|
|
||||||
)
|
|
||||||
|
|
||||||
echo "Checking if node already has cert..."
|
|
||||||
ssh root@$fqdn stat /opt/hscloud/${certname}.crt && exit 0
|
|
||||||
echo "No cert, will generate..."
|
|
||||||
|
|
||||||
cd "$hscloud_root"
|
|
||||||
secrets="$hscloud_root/secrets"
|
|
||||||
ca="$secrets/ca.key"
|
|
||||||
[ ! -f "$ca" ] && ( scripts/secretstore decrypt "$secrets/cipher/ca.key" > $ca )
|
|
||||||
|
|
||||||
cp data/openssl.cnf san.cnf
|
|
||||||
echo -ne "\n[SAN]\nsubjectAltName=DNS:${fqdn}" >> san.cnf
|
|
||||||
scp san.cnf root@$fqdn:/opt/hscloud/san.cnf
|
|
||||||
|
|
||||||
ssh root@$fqdn -- nix-shell -p openssl --command "\"openssl req -new -key /opt/hscloud/${certname}.key -out /opt/hscloud/${certname}.csr -subj '${subj}' -config /opt/hscloud/san.cnf -reqexts SAN\""
|
|
||||||
scp root@$fqdn:/opt/hscloud/${certname}.csr ${fqdn}-${certname}.csr
|
|
||||||
openssl x509 -req \
|
|
||||||
-in ${fqdn}-${certname}.csr \
|
|
||||||
-CA data/ca.crt \
|
|
||||||
-CAkey "$ca" -CAcreateserial \
|
|
||||||
-out "data/${fqdn}-${certname}.crt" \
|
|
||||||
-extensions SAN -extfile san.cnf
|
|
||||||
|
|
||||||
scp "data/${fqdn}-${certname}.crt" root@$fqdn:/opt/hscloud/${certname}.crt
|
|
||||||
scp "data/ca.crt" root@$fqdn:/opt/hscloud/ca.crt
|
|
||||||
ssh root@$fqdn -- chmod 444 /opt/hscloud/${certname}.crt /opt/hscloud/ca.crt
|
|
||||||
rm ${fqdn}-${certname}.csr
|
|
||||||
rm san.cnf
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Generate locally (if not present) a shared certificate, and upload it to the node
|
|
||||||
hscloud-node-shared-cert() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
if [ -z "$1" ] || [ -z "$2" ] || [ -x "$3" ]; then
|
|
||||||
echo >&2 "Usage: hscloud-node-shared-cert node.fqdn.com certname subj"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fqdn="$1"
|
|
||||||
certname="$2"
|
|
||||||
subj="$3"
|
|
||||||
|
|
||||||
cd "$hscloud_root"
|
|
||||||
secrets="$hscloud_root/secrets"
|
|
||||||
keyfile="$secrets/$certname.key"
|
|
||||||
cert="$hscloud_root/data/$certname.crt"
|
|
||||||
csr="$hscloud_root/data/$certname.csr"
|
|
||||||
ca="$secrets/ca.key"
|
|
||||||
[ ! -f "$ca" ] && ( scripts/secretstore decrypt "$secrets/cipher/ca.key" > $ca )
|
|
||||||
|
|
||||||
echo "Checking if key exists..."
|
|
||||||
if [ ! -f "$keyfile" ]; then
|
|
||||||
echo "No key, trying to decrypt..."
|
|
||||||
if ! scripts/secretstore decrypt "$secrets/cipher/$certname.key" > "$keyfile" ; then
|
|
||||||
echo "No encrypted key, generating..."
|
|
||||||
openssl genrsa -out $keyfile 4096
|
|
||||||
echo "Encrypting..."
|
|
||||||
scripts/secretstore encrypt "$keyfile" > "$secrets/cipher/$certname.key"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Checking if cert exists..."
|
|
||||||
if [ ! -f "$cert" ]; then
|
|
||||||
echo "No cert, generating..."
|
|
||||||
rm -f "${csr}"
|
|
||||||
openssl req -new -key "${keyfile}" -out "${csr}" -subj "${subj}"
|
|
||||||
openssl x509 -req -in "${csr}" -CA data/ca.crt -CAkey "$ca" -CAcreateserial -out "${cert}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Copying certificate to node..."
|
|
||||||
scp "${cert}" root@$fqdn:/opt/hscloud/${certname}.crt
|
|
||||||
scp "${keyfile}" root@$fqdn:/opt/hscloud/${certname}.key
|
|
||||||
ssh root@$fqdn -- chmod 444 /opt/hscloud/${certname}.crt
|
|
||||||
ssh root@$fqdn -- chmod 400 /opt/hscloud/${certname}.key
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
hscloud-node-certs() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
echo >&2 "Usage: hscloud-node-certs node.fqdn.com"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fqdn="$1"
|
|
||||||
|
|
||||||
hscloud-node-remote-cert ${fqdn} node "/C=PL/ST=Mazowieckie/L=Mazowieckie/O=Stowarzyszenie Warszawski Hackerspace/OU=Node Bootstrap Certificate/CN=\"$fqdn\""
|
|
||||||
hscloud-node-remote-cert ${fqdn} kube-node "/C=PL/ST=Mazowieckie/L=Mazowieckie/O=system:nodes/OU=Kubernetes Node Certificate/CN=system:node:\"$fqdn\""
|
|
||||||
for component in controller-manager proxy scheduler; do
|
|
||||||
hscloud-node-shared-cert ${fqdn} kube-${component} "/C=PL/ST=Mazowieckie/L=Mazowieckie/O=system:kube-${component}/OU=Kubernetes Component ${component}/CN=system:kube-${component}"
|
|
||||||
done
|
|
||||||
hscloud-node-shared-cert ${fqdn} kube-apiserver "/C=PL/ST=Mazowieckie/L=Mazowieckie/O=Kubernetes API/CN=k0.hswaw.net"
|
|
||||||
hscloud-node-shared-cert ${fqdn} kube-serviceaccounts "/C=PL/ST=Mazowieckie/L=Mazowieckie/O=Kubernetes Service Accounts/CN=service-accounts"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
hscloud-k8s-config() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
echo >&2 "Usage: hscloud-k8s-config username"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
username="$1"
|
|
||||||
|
|
||||||
cd "$hscloud_root"
|
|
||||||
mkdir -p .kubectl
|
|
||||||
|
|
||||||
cert="$hscloud_root/.kubectl/client.crt"
|
|
||||||
csr="$hscloud_root/.kubectl/client.csr"
|
|
||||||
keyfile="$hscloud_root/.kubectl/client.key"
|
|
||||||
secrets="$hscloud_root/secrets"
|
|
||||||
ca="$secrets/ca.key"
|
|
||||||
|
|
||||||
if [ ! -f "$keyfile" ]; then
|
|
||||||
echo "Generating ${keyfile}..."
|
|
||||||
openssl genrsa -out $keyfile 4096
|
|
||||||
rm -f "$cert"
|
|
||||||
fi
|
|
||||||
if [ ! -f "$cert" ]; then
|
|
||||||
echo "Signing ${cert}..."
|
|
||||||
[ ! -f "$ca" ] && ( scripts/secretstore decrypt "$secrets/cipher/ca.key" > $ca )
|
|
||||||
openssl req -new -key "${keyfile}" -out "${csr}" -subj "/C=PL/ST=Mazowieckie/O=system:masters/OU=Kubernetes Admin Account for ${username}/CN=${username}"
|
|
||||||
openssl x509 -req -in "${csr}" -CA data/ca.crt -CAkey "$ca" -CAcreateserial -out "${cert}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
kubeconfig="$hscloud_root/.kubectl/client.kubeconfig"
|
|
||||||
echo "Generating ${kubeconfig}..."
|
|
||||||
rm -rf ${kubeconfig}
|
|
||||||
|
|
||||||
kubectl config set-cluster k0.hswaw.net \
|
|
||||||
--certificate-authority=${hscloud_root}/data/ca.crt \
|
|
||||||
--embed-certs=true \
|
|
||||||
--server=https://k0.hswaw.net:4001 \
|
|
||||||
--kubeconfig=${kubeconfig}
|
|
||||||
|
|
||||||
kubectl config set-credentials ${username} \
|
|
||||||
--client-certificate=${cert} \
|
|
||||||
--client-key=${keyfile} \
|
|
||||||
--embed-certs=true \
|
|
||||||
--kubeconfig=${kubeconfig}
|
|
||||||
|
|
||||||
kubectl config set-context default \
|
|
||||||
--cluster=k0.hswaw.net \
|
|
||||||
--user=${username} \
|
|
||||||
--kubeconfig=${kubeconfig}
|
|
||||||
|
|
||||||
kubectl config use-context default --kubeconfig=${kubeconfig}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
asn1crypto==0.24.0
|
||||||
|
bcrypt==3.1.5
|
||||||
|
cffi==1.11.5
|
||||||
|
cryptography==2.4.2
|
||||||
|
fabric==2.4.0
|
||||||
|
idna==2.8
|
||||||
|
invoke==1.2.0
|
||||||
|
paramiko==2.4.2
|
||||||
|
pyasn1==0.4.5
|
||||||
|
pycparser==2.19
|
||||||
|
PyNaCl==1.3.0
|
||||||
|
six==1.12.0
|
29
tools/BUILD
29
tools/BUILD
|
@ -1,25 +1,36 @@
|
||||||
|
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar", "pkg_deb")
|
||||||
|
load("@py_deps//:requirements.bzl", "requirement")
|
||||||
load("//bzl:rules.bzl", "copy_go_binary")
|
load("//bzl:rules.bzl", "copy_go_binary")
|
||||||
|
|
||||||
py_binary(
|
py_binary(
|
||||||
name = "secretstore",
|
name = "secretstore",
|
||||||
srcs = ["secretstore.py"],
|
srcs = ["secretstore.py"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
py_binary(
|
||||||
|
name = "clustercfg",
|
||||||
|
srcs = ["clustercfg.py"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = [
|
||||||
|
requirement("fabric"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
py_binary(
|
||||||
|
name = "pass",
|
||||||
|
srcs = ["pass.py"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
)
|
)
|
||||||
|
|
||||||
copy_go_binary(
|
copy_go_binary(
|
||||||
name = "kubectl",
|
name = "kubectl",
|
||||||
src = "@io_k8s_kubernetes//cmd/kubectl:kubectl",
|
src = "@io_k8s_kubernetes//cmd/kubectl:kubectl",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
)
|
)
|
||||||
|
|
||||||
copy_go_binary(
|
copy_go_binary(
|
||||||
name = "kubecfg",
|
name = "kubecfg",
|
||||||
src = "@com_github_ksonnet_kubecfg//:kubecfg",
|
src = "@com_github_ksonnet_kubecfg//:kubecfg",
|
||||||
)
|
visibility = ["//visibility:public"],
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "tools",
|
|
||||||
srcs = [
|
|
||||||
":secretstore",
|
|
||||||
":kubectl",
|
|
||||||
":kubecfg",
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,352 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from builtins import object
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from io import BytesIO
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from cryptography import x509
|
||||||
|
from cryptography.hazmat.backends import default_backend
|
||||||
|
import fabric
|
||||||
|
|
||||||
|
import secretstore
|
||||||
|
|
||||||
|
|
||||||
|
cluster = 'k0.hswaw.net'
|
||||||
|
remote_root = '/opt/hscloud'
|
||||||
|
local_root = os.getenv('hscloud_root')
|
||||||
|
|
||||||
|
if local_root is None:
|
||||||
|
raise Exception("Please source env.sh")
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
logger.addHandler(logging.StreamHandler())
|
||||||
|
|
||||||
|
|
||||||
|
def decrypt(base):
|
||||||
|
src = os.path.join(local_root, 'cluster/secrets/cipher', base)
|
||||||
|
dst = os.path.join(local_root, 'cluster/secrets/plain', base)
|
||||||
|
secretstore.decrypt(src, dst)
|
||||||
|
|
||||||
|
|
||||||
|
class PKI(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.cacert = os.path.join(local_root, 'cluster/certs/ca.crt')
|
||||||
|
self.cakey = os.path.join(local_root, 'cluster/secrets/plain/ca.key')
|
||||||
|
|
||||||
|
if not os.path.exists(self.cakey):
|
||||||
|
decrypt('ca.key')
|
||||||
|
|
||||||
|
def sign(self, csr, crt, conf, days=365):
|
||||||
|
logger.info('pki: signing {} for {} days'.format(csr, days))
|
||||||
|
subprocess.check_call([
|
||||||
|
'openssl', 'x509', '-req',
|
||||||
|
'-in', csr,
|
||||||
|
'-CA', self.cacert,
|
||||||
|
'-CAkey', self.cakey,
|
||||||
|
'-out', crt,
|
||||||
|
'-extensions', 'SAN', '-extfile', conf,
|
||||||
|
'-days', str(days),
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
class Subject(object):
|
||||||
|
hswaw = "Stowarzyszenie Warszawski Hackerspace"
|
||||||
|
def __init__(self, o, ou, cn):
|
||||||
|
self.c = 'PL'
|
||||||
|
self.st = 'Mazowieckie'
|
||||||
|
self.l = 'Warszawa'
|
||||||
|
self.o = o
|
||||||
|
self.ou = ou
|
||||||
|
self.cn = cn
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parts(self):
|
||||||
|
return {
|
||||||
|
'C': self.c,
|
||||||
|
'ST': self.st,
|
||||||
|
'L': self.l,
|
||||||
|
'O': self.o,
|
||||||
|
'OU': self.ou,
|
||||||
|
'CN': self.cn,
|
||||||
|
}
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
parts = self.parts
|
||||||
|
res = []
|
||||||
|
for p in ['C', 'ST', 'L', 'O', 'OU', 'CN']:
|
||||||
|
res.append('/{}={}'.format(p, parts[p]))
|
||||||
|
return ''.join(res)
|
||||||
|
|
||||||
|
def _file_exists(c, filename):
|
||||||
|
res = c.run('stat "{}"'.format(filename), warn=True, hide=True)
|
||||||
|
return res.exited == 0
|
||||||
|
|
||||||
|
def openssl_config(san):
|
||||||
|
with open(os.path.join(local_root, 'cluster/openssl.cnf'), 'rb') as f:
|
||||||
|
config = BytesIO(f.read())
|
||||||
|
|
||||||
|
config.seek(0, 2)
|
||||||
|
config.write(b'\n[SAN]\n')
|
||||||
|
for s in san:
|
||||||
|
config.write('subjectAltName=DNS:{}\n'.format(s).encode())
|
||||||
|
|
||||||
|
f = tempfile.NamedTemporaryFile(delete=False)
|
||||||
|
path = f.name
|
||||||
|
f.write(config.getvalue())
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
return path
|
||||||
|
|
||||||
|
def remote_cert(pki, c, fqdn, cert_name, subj, san=[], days=365):
|
||||||
|
logger.info("{}/{}: remote cert".format(fqdn, cert_name))
|
||||||
|
|
||||||
|
remote_key = os.path.join(remote_root, '{}.key'.format(cert_name))
|
||||||
|
remote_cert = os.path.join(remote_root, '{}.crt'.format(cert_name))
|
||||||
|
remote_csr = os.path.join(remote_root, '{}.csr'.format(cert_name))
|
||||||
|
remote_config = os.path.join(remote_root, 'openssl.cnf')
|
||||||
|
|
||||||
|
generate_cert = False
|
||||||
|
if not _file_exists(c, remote_key):
|
||||||
|
logger.info("{}/{}: generating key".format(fqdn, cert_name))
|
||||||
|
c.run('openssl genrsa -out "{}" 4096'.format(remote_key), hide=True)
|
||||||
|
genereate_cert = True
|
||||||
|
|
||||||
|
b = BytesIO()
|
||||||
|
try:
|
||||||
|
c.get(local=b, remote=remote_cert)
|
||||||
|
cert = x509.load_pem_x509_certificate(b.getvalue(), default_backend())
|
||||||
|
delta = cert.not_valid_after - datetime.datetime.now()
|
||||||
|
logger.info("{}/{}: existing cert expiry: {}".format(fqdn, cert_name, delta))
|
||||||
|
if delta.total_seconds() < 3600 * 24 * 60:
|
||||||
|
logger.info("{}/{}: expires soon, regenerating".format(fqdn, cert_name))
|
||||||
|
generate_cert = True
|
||||||
|
except (FileNotFoundError, ValueError):
|
||||||
|
generate_cert = True
|
||||||
|
|
||||||
|
if not generate_cert:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
local_config = openssl_config(san)
|
||||||
|
c.put(local=local_config, remote=remote_config)
|
||||||
|
|
||||||
|
c.run("""
|
||||||
|
nix-shell -p openssl --command "openssl req -new -key {remote_key} -out {remote_csr} -subj '{subj}' -config {remote_config} -reqexts SAN"
|
||||||
|
""".format(remote_key=remote_key, remote_csr=remote_csr, subj=str(subj), remote_config=remote_config))
|
||||||
|
|
||||||
|
local_csr_f = tempfile.NamedTemporaryFile(delete=False)
|
||||||
|
local_csr = local_csr_f.name
|
||||||
|
local_csr_f.close()
|
||||||
|
|
||||||
|
local_cert = os.path.join(local_root, 'cluster/certs', '{}-{}.crt'.format(fqdn, cert_name))
|
||||||
|
|
||||||
|
c.get(local=local_csr, remote=remote_csr)
|
||||||
|
|
||||||
|
pki.sign(local_csr, local_cert, local_config, days)
|
||||||
|
|
||||||
|
c.put(local=local_cert, remote=remote_cert)
|
||||||
|
|
||||||
|
os.remove(local_csr)
|
||||||
|
os.remove(local_config)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def shared_cert(pki, c, fqdn, cert_name, subj, san=[], days=365):
|
||||||
|
logger.info("{}/{}: shared cert".format(fqdn, cert_name))
|
||||||
|
|
||||||
|
local_key = os.path.join(local_root, 'cluster/secrets/plain', '{}.key'.format(cert_name))
|
||||||
|
local_cert = os.path.join(local_root, 'cluster/certs', '{}.crt'.format(cert_name))
|
||||||
|
remote_key = os.path.join(remote_root, '{}.key'.format(cert_name))
|
||||||
|
remote_cert = os.path.join(remote_root, '{}.crt'.format(cert_name))
|
||||||
|
|
||||||
|
generate_cert = False
|
||||||
|
if not os.path.exists(local_key):
|
||||||
|
try:
|
||||||
|
decrypt('{}.key'.format(cert_name))
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
logger.info("{}/{}: generating key".format(fqdn, cert_name))
|
||||||
|
subprocess.check_call([
|
||||||
|
'openssl', 'genrsa', '-out', local_key, '4096',
|
||||||
|
])
|
||||||
|
generate_cert = True
|
||||||
|
|
||||||
|
if os.path.exists(local_cert):
|
||||||
|
with open(local_cert, 'rb') as f:
|
||||||
|
b = f.read()
|
||||||
|
cert = x509.load_pem_x509_certificate(b, default_backend())
|
||||||
|
delta = cert.not_valid_after - datetime.datetime.now()
|
||||||
|
logger.info("{}/{}: existing cert expiry: {}".format(fqdn, cert_name, delta))
|
||||||
|
if delta.total_seconds() < 3600 * 24 * 60:
|
||||||
|
logger.info("{}/{}: expires soon, regenerating".format(fqdn, cert_name))
|
||||||
|
generate_cert = True
|
||||||
|
else:
|
||||||
|
generate_cert = True
|
||||||
|
|
||||||
|
if not generate_cert:
|
||||||
|
return False
|
||||||
|
|
||||||
|
local_csr_f = tempfile.NamedTemporaryFile(delete=False)
|
||||||
|
local_csr = local_csr_f.name
|
||||||
|
local_csr_f.close()
|
||||||
|
|
||||||
|
local_config = openssl_config(san)
|
||||||
|
|
||||||
|
subprocess.check_call([
|
||||||
|
'openssl', 'req', '-new',
|
||||||
|
'-key', local_key,
|
||||||
|
'-out', local_csr,
|
||||||
|
'-subj', str(subj),
|
||||||
|
'-config', local_config,
|
||||||
|
'-reqexts', 'SAN',
|
||||||
|
])
|
||||||
|
|
||||||
|
pki.sign(local_csr, local_cert, local_config, days)
|
||||||
|
|
||||||
|
c.put(local=local_key, remote=remote_key)
|
||||||
|
c.put(local=local_cert, remote=remote_cert)
|
||||||
|
|
||||||
|
os.remove(local_csr)
|
||||||
|
os.remove(local_config)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def configure_k8s(username, ca, cert, key):
|
||||||
|
subprocess.check_call([
|
||||||
|
'kubectl', 'config',
|
||||||
|
'set-cluster', cluster,
|
||||||
|
'--certificate-authority=' + ca,
|
||||||
|
'--embed-certs=true',
|
||||||
|
'--server=https://' + cluster + ':4001',
|
||||||
|
])
|
||||||
|
subprocess.check_call([
|
||||||
|
'kubectl', 'config',
|
||||||
|
'set-credentials', username,
|
||||||
|
'--client-certificate=' + cert,
|
||||||
|
'--client-key=' + key,
|
||||||
|
'--embed-certs=true',
|
||||||
|
])
|
||||||
|
subprocess.check_call([
|
||||||
|
'kubectl', 'config',
|
||||||
|
'set-context', cluster,
|
||||||
|
'--cluster=' + cluster,
|
||||||
|
'--user=' + username,
|
||||||
|
])
|
||||||
|
subprocess.check_call([
|
||||||
|
'kubectl', 'config',
|
||||||
|
'use-context', cluster,
|
||||||
|
])
|
||||||
|
|
||||||
|
def admincreds(args):
|
||||||
|
if len(args) != 1:
|
||||||
|
sys.stderr.write("Usage: admincreds q3k\n")
|
||||||
|
return 1
|
||||||
|
username = args[0]
|
||||||
|
|
||||||
|
pki = PKI()
|
||||||
|
|
||||||
|
local_key = os.path.join(local_root, '.kubectl/admin.key')
|
||||||
|
local_cert = os.path.join(local_root, '.kubectl/admin.crt')
|
||||||
|
local_csr = os.path.join(local_root, '.kubectl/admin.csr')
|
||||||
|
|
||||||
|
generate_cert = False
|
||||||
|
if not os.path.exists(local_key):
|
||||||
|
subprocess.check_call([
|
||||||
|
'openssl', 'genrsa', '-out', local_key, '4096',
|
||||||
|
])
|
||||||
|
generate_cert = True
|
||||||
|
|
||||||
|
if os.path.exists(local_cert):
|
||||||
|
with open(local_cert, 'rb') as f:
|
||||||
|
b = f.read()
|
||||||
|
cert = x509.load_pem_x509_certificate(b, default_backend())
|
||||||
|
delta = cert.not_valid_after - datetime.datetime.now()
|
||||||
|
logger.info("admin: existing cert expiry: {}".format(delta))
|
||||||
|
if delta.total_seconds() < 3600 * 24:
|
||||||
|
logger.info("admin: expires soon, regenerating")
|
||||||
|
generate_cert = True
|
||||||
|
else:
|
||||||
|
generate_cert = True
|
||||||
|
|
||||||
|
if not generate_cert:
|
||||||
|
return configure_k8s(username, pki.cacert, local_cert, local_key)
|
||||||
|
|
||||||
|
local_config = openssl_config([])
|
||||||
|
subj = Subject('system:masters', "Kubernetes Admin Account for {}".format(username), username)
|
||||||
|
|
||||||
|
subprocess.check_call([
|
||||||
|
'openssl', 'req', '-new',
|
||||||
|
'-key', local_key,
|
||||||
|
'-out', local_csr,
|
||||||
|
'-subj', str(subj),
|
||||||
|
'-config', local_config,
|
||||||
|
'-reqexts', 'SAN',
|
||||||
|
])
|
||||||
|
|
||||||
|
pki.sign(local_csr, local_cert, local_config, 5)
|
||||||
|
os.remove(local_config)
|
||||||
|
|
||||||
|
configure_k8s(username, pki.cacert, local_cert, local_key)
|
||||||
|
|
||||||
|
|
||||||
|
def nodestrap(args):
|
||||||
|
if len(args) != 1:
|
||||||
|
sys.stderr.write("Usage: nodestrap bc01n01.hswaw.net\n")
|
||||||
|
return 1
|
||||||
|
fqdn = args[0]
|
||||||
|
|
||||||
|
logger.info("Nodestrapping {}...".format(fqdn))
|
||||||
|
|
||||||
|
c = fabric.Connection('root@{}'.format(fqdn))
|
||||||
|
p = PKI()
|
||||||
|
|
||||||
|
modified = False
|
||||||
|
modified |= remote_cert(p, c, fqdn, "node", Subject(Subject.hswaw, 'Node Certificate', fqdn))
|
||||||
|
modified |= remote_cert(p, c, fqdn, "kube-node", Subject('system:nodes', 'Kubelet Certificate', 'system:node:' + fqdn), san=[fqdn,])
|
||||||
|
for component in ['controller-manager', 'proxy', 'scheduler']:
|
||||||
|
o = 'system:kube-{}'.format(component)
|
||||||
|
ou = 'Kuberneter Component {}'.format(component)
|
||||||
|
modified |= shared_cert(p, c, fqdn, 'kube-{}'.format(component), Subject(o, ou, o))
|
||||||
|
modified |= shared_cert(p, c, fqdn, 'kube-apiserver', Subject(Subject.hswaw, 'Kubernetes API', cluster))
|
||||||
|
modified |= shared_cert(p, c, fqdn, 'kube-serviceaccounts', Subject(Subject.hswaw, 'Kubernetes Service Account Signer', 'service-accounts'))
|
||||||
|
|
||||||
|
if modified:
|
||||||
|
logger.info('{}: cert(s) modified, restarting services...'.format(fqdn))
|
||||||
|
|
||||||
|
services = [
|
||||||
|
'kubelet', 'kube-proxy',
|
||||||
|
'kube-apiserver', 'kube-controller-manager', 'kube-scheduler',
|
||||||
|
'etcd'
|
||||||
|
]
|
||||||
|
|
||||||
|
for s in services:
|
||||||
|
c.run('systemctl stop {}'.format(s))
|
||||||
|
for s in services[::-1]:
|
||||||
|
c.run('systemctl start {}'.format(s))
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
sys.stderr.write("Usage: {} <nodestrap|admincreds>\n".format(sys.argv[0]))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
usage()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
mode = sys.argv[1]
|
||||||
|
if mode == "nodestrap":
|
||||||
|
return nodestrap(sys.argv[2:])
|
||||||
|
elif mode == "admincreds":
|
||||||
|
return admincreds(sys.argv[2:])
|
||||||
|
else:
|
||||||
|
usage()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main() or 0)
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [ -z "$hscloud_root" ]; then
|
||||||
|
echo 2>&1 "Please first source env.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "${hscloud_root}"
|
||||||
|
|
||||||
|
bazel build \
|
||||||
|
//tools:kubectl //tools:kubecfg //tools:clustercfg //tools:secretstore \
|
||||||
|
//tools:pass
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# This is a fake `pass` to make docker-credential-helpers shut up.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.exit(1)
|
|
@ -10,6 +10,18 @@ keys = [
|
||||||
"482FF104C29294AD1CAF827BA43890A3DE74ECC7", # inf
|
"482FF104C29294AD1CAF827BA43890A3DE74ECC7", # inf
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def encrypt(src, dst):
|
||||||
|
cmd = ['gpg' , '--encrypt', '--armor', '--batch', '--yes', '--output', dst]
|
||||||
|
for k in keys:
|
||||||
|
cmd.append('--recipient')
|
||||||
|
cmd.append(k)
|
||||||
|
cmd.append(src)
|
||||||
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
|
def decrypt(src, dst):
|
||||||
|
cmd = ['gpg', '--decrypt', '--output', dst, src]
|
||||||
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) < 3 or sys.argv[1] not in ('encrypt', 'decrypt'):
|
if len(sys.argv) < 3 or sys.argv[1] not in ('encrypt', 'decrypt'):
|
||||||
sys.stderr.write("Usage: {} encrypt/decrypt file\n".format(sys.argv[0]))
|
sys.stderr.write("Usage: {} encrypt/decrypt file\n".format(sys.argv[0]))
|
||||||
|
@ -20,15 +32,9 @@ def main():
|
||||||
src = sys.argv[2]
|
src = sys.argv[2]
|
||||||
|
|
||||||
if action == 'encrypt':
|
if action == 'encrypt':
|
||||||
cmd = ['gpg' , '--encrypt', '--armor', '--batch', '--yes', '--output', '-']
|
encrypt(src, '-')
|
||||||
for k in keys:
|
|
||||||
cmd.append('--recipient')
|
|
||||||
cmd.append(k)
|
|
||||||
cmd.append(src)
|
|
||||||
subprocess.check_call(cmd)
|
|
||||||
else:
|
else:
|
||||||
cmd = ['gpg', '--decrypt', '--output', '-', src]
|
decrypt(src, '-')
|
||||||
subprocess.check_call(cmd)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main() or 0)
|
sys.exit(main() or 0)
|
||||||
|
|
Loading…
Reference in New Issue