letsencrypt v0.4.0 (#410)
* Update letsencrypt template to v0.4.0 (1) * Update letsencrypt template to v0.4.0 (2)
This commit is contained in:
parent
d4f83acad5
commit
78e773aa46
86
templates/letsencrypt/3/README.md
Normal file
86
templates/letsencrypt/3/README.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# Let's Encrypt Certificate Manager
|
||||||
|
|
||||||
|
### About
|
||||||
|
The Let's Encrypt Certificate Manager obtains a free (SAN) SSL Certificate from the [Let's Encrypt CA](https://letsencrypt.org/) and adds it to Rancher's certificate store. Once the certificate is created it is scheduled for automatic renewal 20-days before expiration. Rancher load balancer services are automatically updated to use the renewed certificate.
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
1. Accept the terms of service.
|
||||||
|
2. Select the API version to use. The Sandbox API should be used for testing purposes.
|
||||||
|
3. Fill in your email address.
|
||||||
|
4. Enter the name used for storing the certificate in Rancher and volumes. Any existing certificate by that name will be updated.
|
||||||
|
5. Enter one or more domain names. The first domain will be used as the Common Name property of the certificate.
|
||||||
|
6. Fill in the required credentials for the chosen provider. Note provider specific usage notes below.
|
||||||
|
|
||||||
|
If you want the certificate to be automatically renewed, leave the service running. Otherwise you may remove the service once the certificate has appeared in Rancher's certificate store.
|
||||||
|
|
||||||
|
### Using persistent storage volume
|
||||||
|
|
||||||
|
If you specify an existing volume storage driver (e.g. rancher-nfs) then the account data, certificate and private key will be stored in a stack scoped volume named `lets-encrypt`, allowing you to access them from other services in the same stack. See the [Storage Service documentation](https://docs.rancher.com/rancher/v1.3/en/rancher-services/storage-service/).
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
When mounting the `lets-encrypt` storage volume to `/etc/letsencrypt` in another container, then production certificates and keys are located at:
|
||||||
|
|
||||||
|
- `/etc/letsencrypt/production/certs/<certificate name>/fullchain.pem`
|
||||||
|
- `/etc/letsencrypt/production/certs/<certificate name>/privkey.pem`
|
||||||
|
|
||||||
|
where `<certificate name>` is the name of the certificate sanitized to consist of only the following characters: `[a-zA-Z0-9-_.]`.
|
||||||
|
|
||||||
|
### Provider specific usage
|
||||||
|
|
||||||
|
#### AWS Route 53
|
||||||
|
|
||||||
|
The following IAM policy describes the minimum permissions required when using AWS Route 53 for domain authorization.
|
||||||
|
Replace `<HOSTED_ZONE_ID>` with the ID of the hosted zone that encloses the domain(s) for which you are going to obtain certificates. You may use a wildcard (*) in place of the ID to make this policy work with all of the hosted zones associated with an AWS account.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Version": "2012-10-17",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": [
|
||||||
|
"route53:GetChange",
|
||||||
|
"route53:ListHostedZonesByName"
|
||||||
|
],
|
||||||
|
"Resource": [
|
||||||
|
"*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": [
|
||||||
|
"route53:ChangeResourceRecordSets"
|
||||||
|
],
|
||||||
|
"Resource": [
|
||||||
|
"arn:aws:route53:::hostedzone/<HOSTED_ZONE_ID>"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### OVH
|
||||||
|
|
||||||
|
First create your credentials on https://eu.api.ovh.com/createToken/ by filling out the form like this:
|
||||||
|
|
||||||
|
- `Account ID`: Your OVH account ID
|
||||||
|
- `Password`: Your password
|
||||||
|
- `Script name`: letsencrypt
|
||||||
|
- `Script description`: Letsencrypt for Rancher
|
||||||
|
- `Validity`: Unlimited
|
||||||
|
- `Rights`:
|
||||||
|
- GET /domain/zone/*
|
||||||
|
- POST /domain/zone/*
|
||||||
|
- DELETE /domain/zone/*
|
||||||
|
|
||||||
|
Then deploy this service using the generated key, application secret and consumer key.
|
||||||
|
|
||||||
|
#### HTTP
|
||||||
|
|
||||||
|
If you prefer not to use a DNS-based challenge or your provider is not supported, you can use the HTTP challenge.
|
||||||
|
Simply choose `HTTP` from the list of providers.
|
||||||
|
Then make sure that HTTP requests to `domain.com/.well-known/acme-challenge` are forwarded to the `rancher-letsencrypt` service, e.g. by configuring a Rancher load balancer accordingly.
|
||||||
|
|
||||||
|
### Suggestions & bug reports
|
||||||
|
Please submit suggestions or any issues you find to the [rancher-letsencrypt](https://github.com/janeczku/rancher-letsencrypt) GitHub repo.
|
36
templates/letsencrypt/3/docker-compose.yml
Normal file
36
templates/letsencrypt/3/docker-compose.yml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
letsencrypt:
|
||||||
|
image: janeczku/rancher-letsencrypt:v0.4.0
|
||||||
|
environment:
|
||||||
|
EULA: ${EULA}
|
||||||
|
API_VERSION: ${API_VERSION}
|
||||||
|
CERT_NAME: ${CERT_NAME}
|
||||||
|
EMAIL: ${EMAIL}
|
||||||
|
DOMAINS: ${DOMAINS}
|
||||||
|
PUBLIC_KEY_TYPE: ${PUBLIC_KEY_TYPE}
|
||||||
|
RENEWAL_TIME: ${RENEWAL_TIME}
|
||||||
|
PROVIDER: ${PROVIDER}
|
||||||
|
CLOUDFLARE_EMAIL: ${CLOUDFLARE_EMAIL}
|
||||||
|
CLOUDFLARE_KEY: ${CLOUDFLARE_KEY}
|
||||||
|
DO_ACCESS_TOKEN: ${DO_ACCESS_TOKEN}
|
||||||
|
AWS_ACCESS_KEY: ${AWS_ACCESS_KEY}
|
||||||
|
AWS_SECRET_KEY: ${AWS_SECRET_KEY}
|
||||||
|
DNSIMPLE_EMAIL: ${DNSIMPLE_EMAIL}
|
||||||
|
DNSIMPLE_KEY: ${DNSIMPLE_KEY}
|
||||||
|
DYN_CUSTOMER_NAME: ${DYN_CUSTOMER_NAME}
|
||||||
|
DYN_USER_NAME: ${DYN_USER_NAME}
|
||||||
|
DYN_PASSWORD: ${DYN_PASSWORD}
|
||||||
|
VULTR_API_KEY: ${VULTR_API_KEY}
|
||||||
|
OVH_APPLICATION_KEY: ${OVH_APPLICATION_KEY}
|
||||||
|
OVH_APPLICATION_SECRET: ${OVH_APPLICATION_SECRET}
|
||||||
|
OVH_CONSUMER_KEY: ${OVH_CONSUMER_KEY}
|
||||||
|
GANDI_API_KEY: ${GANDI_API_KEY}
|
||||||
|
volumes:
|
||||||
|
- lets-encrypt:/etc/letsencrypt
|
||||||
|
labels:
|
||||||
|
io.rancher.container.create_agent: 'true'
|
||||||
|
io.rancher.container.agent.role: 'environment'
|
||||||
|
volumes:
|
||||||
|
lets-encrypt:
|
||||||
|
driver: ${STORAGE_DRIVER}
|
163
templates/letsencrypt/3/rancher-compose.yml
Normal file
163
templates/letsencrypt/3/rancher-compose.yml
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
.catalog:
|
||||||
|
name: Let's Encrypt
|
||||||
|
version: 0.4.0
|
||||||
|
description: Trusted SSL certificates at zero cost
|
||||||
|
minimum_rancher_version: v1.2.0-pre4-rc1
|
||||||
|
questions:
|
||||||
|
- variable: EULA
|
||||||
|
label: I Agree to the Let's Encrypt TOS
|
||||||
|
description: |
|
||||||
|
Read https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf
|
||||||
|
required: true
|
||||||
|
type: enum
|
||||||
|
options:
|
||||||
|
- "Yes"
|
||||||
|
- "No"
|
||||||
|
- variable: API_VERSION
|
||||||
|
label: Let's Encrypt API Version
|
||||||
|
description: |
|
||||||
|
Select the API version used for issuing the certificate.
|
||||||
|
Use `Sandbox` for testing only.
|
||||||
|
required: true
|
||||||
|
type: enum
|
||||||
|
default: Production
|
||||||
|
options:
|
||||||
|
- Production
|
||||||
|
- Sandbox
|
||||||
|
- variable: EMAIL
|
||||||
|
label: Your Email Address
|
||||||
|
description: |
|
||||||
|
Enter the email address to use for creating the Let's Encrypt account.
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
- variable: CERT_NAME
|
||||||
|
label: Certificate Name
|
||||||
|
description: |
|
||||||
|
Name for storing the certificate in the Rancher API and in volumes.
|
||||||
|
Any existing certificate by that name will be updated.
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
- variable: DOMAINS
|
||||||
|
label: Domain Names
|
||||||
|
description: |
|
||||||
|
Comma delimited list of the certificate domains starting with the Common Name.
|
||||||
|
E.g: `example.com, dev.example.com`.
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
- variable: PUBLIC_KEY_TYPE
|
||||||
|
label: Public Key Algorithm
|
||||||
|
description: |
|
||||||
|
Select one of the available key types.
|
||||||
|
required: true
|
||||||
|
type: enum
|
||||||
|
default: RSA-2048
|
||||||
|
options:
|
||||||
|
- RSA-2048
|
||||||
|
- RSA-4096
|
||||||
|
- RSA-8192
|
||||||
|
- ECDSA-256
|
||||||
|
- ECDSA-384
|
||||||
|
- variable: RENEWAL_TIME
|
||||||
|
label: Renewal Time of Day (00-23)
|
||||||
|
description: |
|
||||||
|
Set the time of day (UTC in hours) at which certificate renewals should be run.
|
||||||
|
default: 12
|
||||||
|
required: true
|
||||||
|
type: int
|
||||||
|
- variable: STORAGE_DRIVER
|
||||||
|
label: Volume Storage Driver (Optional)
|
||||||
|
description: |
|
||||||
|
If you enter the name of an existing storage driver (see `Infrastructure -> Storage`) then a stack scoped storage volume named `lets-encrypt`
|
||||||
|
will be created or used to store account data, certificates and private keys.
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
- variable: PROVIDER
|
||||||
|
label: Domain Validation Method
|
||||||
|
description: Select a DNS provider to use for domain validation. Use 'HTTP' if DNS for the domain is not hosted with any of the providers.
|
||||||
|
required: true
|
||||||
|
type: enum
|
||||||
|
options:
|
||||||
|
- CloudFlare
|
||||||
|
- DigitalOcean
|
||||||
|
- DNSimple
|
||||||
|
- Dyn
|
||||||
|
- Gandi
|
||||||
|
- HTTP
|
||||||
|
- Ovh
|
||||||
|
- Route53
|
||||||
|
- Vultr
|
||||||
|
- variable: AWS_ACCESS_KEY
|
||||||
|
label: AWS Route53 Access Key Id
|
||||||
|
description: Enter the Access Key Id for your AWS account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: AWS_SECRET_KEY
|
||||||
|
label: AWS Route53 Secret Access Key
|
||||||
|
description: Enter the Secret Access Key for your AWS account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: CLOUDFLARE_EMAIL
|
||||||
|
label: CloudFlare Email Address
|
||||||
|
description: Enter the email address associated with your CloudFlare account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: CLOUDFLARE_KEY
|
||||||
|
label: CloudFlare API Key
|
||||||
|
description: Enter the Global API Key for your CloudFlare account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: DO_ACCESS_TOKEN
|
||||||
|
label: DigitalOcean API Access Token
|
||||||
|
description: Enter the Personal Access Token for your DigitalOcean account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: DNSIMPLE_EMAIL
|
||||||
|
label: DNSimple Email Address
|
||||||
|
description: Enter the email address associated with your DNSimple account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: DNSIMPLE_KEY
|
||||||
|
label: DNSimple API Key
|
||||||
|
description: Enter your DNSimple API key.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: DYN_CUSTOMER_NAME
|
||||||
|
label: Dyn Customer Name
|
||||||
|
description: Enter your Dyn customer name.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: DYN_USER_NAME
|
||||||
|
label: Dyn User Name
|
||||||
|
description: Enter your Dyn user name.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: DYN_PASSWORD
|
||||||
|
label: Dyn Password
|
||||||
|
description: Enter your Dyn password.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: GANDI_API_KEY
|
||||||
|
label: Gandi API Key
|
||||||
|
description: Enter the API key for your Gandi account.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: OVH_APPLICATION_KEY
|
||||||
|
label: OVH Application Key
|
||||||
|
description: Enter your OVH application key.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: OVH_APPLICATION_SECRET
|
||||||
|
label: OVH Application Secret
|
||||||
|
description: Enter your OVH application secret.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: OVH_CONSUMER_KEY
|
||||||
|
label: OVH Consumer Key
|
||||||
|
description: Enter your OVH consumer key.
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
- variable: VULTR_API_KEY
|
||||||
|
label: Vultr API Key
|
||||||
|
description: Enter the API key for your Vultr account.
|
||||||
|
type: string
|
||||||
|
required: false
|
@ -1,7 +1,7 @@
|
|||||||
name: Let's Encrypt
|
name: Let's Encrypt
|
||||||
description: |
|
description: |
|
||||||
Trusted SSL certificates at zero cost
|
Trusted SSL certificates at zero cost
|
||||||
version: 0.3.0
|
version: 0.4.0
|
||||||
category: Security
|
category: Security
|
||||||
maintainer: Jan Bruder <jan@rancher.com>
|
maintainer: Jan Bruder <jan@rancher.com>
|
||||||
license: The MIT License
|
license: The MIT License
|
||||||
|
Loading…
x
Reference in New Issue
Block a user