-
Notifications
You must be signed in to change notification settings - Fork 18
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
Adds a custom domains Capabilities page/guide #1343
Changes from 9 commits
aa0478b
215c3e7
cd2b2b3
e01d20a
1cd979c
b344236
dc1e3cb
99ea94f
3980d97
ebe2a43
a114898
35bb4df
7fed536
d1485c8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,79 @@ | ||||||||||||||
--- | ||||||||||||||
# cSpell:ignore mycorp | ||||||||||||||
id: custom-domains | ||||||||||||||
title: Custom Domains | ||||||||||||||
sidebar_label: Custom Domains | ||||||||||||||
description: This document describes Custom Domains in Pomerium Zero. You'll learn how to add your own domain and what Pomerium requires to do so. | ||||||||||||||
--- | ||||||||||||||
|
||||||||||||||
# Custom Domains in Pomerium Zero | ||||||||||||||
|
||||||||||||||
This document describes **Custom Domains** in Pomerium Zero. | ||||||||||||||
|
||||||||||||||
## Overview | ||||||||||||||
|
||||||||||||||
When you deploy a cluster in Pomerium Zero, we provision a randomly generated starter subdomain under `pomerium.app` that's assigned to that cluster (for example, `unique-jellyfish-3578.pomerium.app`). | ||||||||||||||
|
||||||||||||||
Each starter subdomain comes with its own DNS records and TLS certificates, which makes it easier for new users to quickly build and test routes and policies in Pomerium Zero. | ||||||||||||||
|
||||||||||||||
After testing Pomerium Zero with your starter domain, you may want to add a custom domain for use by your cluster's routes to secure your apps and services. | ||||||||||||||
|
||||||||||||||
:::info | ||||||||||||||
|
||||||||||||||
See the Clusters Concepts page for more information about clusters in Pomerium Zero. | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Assume link is coming?
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes |
||||||||||||||
|
||||||||||||||
::: | ||||||||||||||
|
||||||||||||||
## Custom Domains | ||||||||||||||
|
||||||||||||||
In Pomerium Zero, a valid **Custom Domain** is a fully qualified domain name (FQDN) where the domain owner can demonstrate control over the domain through DNS validation. | ||||||||||||||
ZPain8464 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
After you successfully add a custom domain to your cluster, Pomerium will automatically issue and renew X.509 wildcard certificates on behalf of the domain to secure the connection over TLS. | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd suggest removing this paragraph if you like my suggestion for the previous paragraph. (Otherwise, I'd suggest using "TLS certificate" rather than "X.509 certificate" as that's the terminology first used in the Overview section.) |
||||||||||||||
|
||||||||||||||
### Fully Qualified Domain Names | ||||||||||||||
|
||||||||||||||
In the context of Pomerium Zero, an FQDN is the complete domain name of a custom domain. The example below resembles a valid FQDN, where `service` is the hostname, `mycorp` is the subdomain, and `example.com` is the domain name: | ||||||||||||||
|
||||||||||||||
`service.mycorp.example.com` | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure what the best example here would be. Maybe we should give some example routes? For example, given routes like:
You would want to use |
||||||||||||||
|
||||||||||||||
### DNS validation | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd suggest moving this section further down, after "How to add a custom domain", and possibly renaming this section to "How it works". (I expect more users will want to know "how do I do this" compared to "what's going on behind the scenes".) |
||||||||||||||
|
||||||||||||||
In order for Pomerium to issue certificates on behalf of a custom domain, you must prove that you control the domain name specified in the certificate through DNS validation. Per the [ACME protocol](https://datatracker.ietf.org/doc/html/rfc8555#section-2), Pomerium uses its own ACME client to communicate with Let's Encrypt, a free Certificate Authority, to validate a domain's DNS records. | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's a nice detail we cover how. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. one terminology nit: Pomerium doesn't "issue" certificates itself (only a "certificate authority" can do that), so if we want to be more precise I might suggest using "request" or "provision" instead of "issue". |
||||||||||||||
|
||||||||||||||
Let's Encrypt provides several [challenge types](https://letsencrypt.org/docs/challenge-types/) to validate a domain, including the [DNS-01 challenge](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge). At a high level, this challenge consists of two steps: | ||||||||||||||
|
||||||||||||||
1. A TXT record containing a specific token value must be placed into the `_acme-challenge.<YOUR_DOMAIN>` endpoint | ||||||||||||||
1. A **wildcard CNAME record** must be added under the custom domain that points to your cluster's **Starter Domain** | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's more of an either/or. Either a Using a |
||||||||||||||
|
||||||||||||||
Pomerium takes care of step `1` for you. Step `2` requires you to manually add the wildcard CNAME record to your domain. | ||||||||||||||
|
||||||||||||||
Refer to the steps in [How to Add a Custom Domain](#how-to-add-a-custom-domain) for specific instructions. | ||||||||||||||
|
||||||||||||||
## How to Add a Custom Domain | ||||||||||||||
|
||||||||||||||
Add a wildcard CNAME record that points to your starter domain: | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wonder if we should include a little code snippet too?
Suggested change
For example, one of Cloudflare's help pages does something similar when giving instructions for adding a CNAME: |
||||||||||||||
|
||||||||||||||
 | ||||||||||||||
|
||||||||||||||
:::note | ||||||||||||||
|
||||||||||||||
The steps to add a wildcard CNAME record to your domain vary depending on your domain registrar and/or DNS provider. This guide uses Google Cloud Platform as an example. | ||||||||||||||
|
||||||||||||||
::: | ||||||||||||||
|
||||||||||||||
Add the custom domain in the Zero Console: | ||||||||||||||
|
||||||||||||||
1. Select **Settings** | ||||||||||||||
1. In the **Editing Clusters Settings** dashboard, select **Domains** | ||||||||||||||
1. In the **Custom Domains** field, select the **+** icon to add a domain name | ||||||||||||||
1. Enter your FQDN | ||||||||||||||
|
||||||||||||||
 | ||||||||||||||
|
||||||||||||||
If added successfully, you will be able to build routes with your custom domain instead of the starter domain. Pomerium will automatically issue and renew X.509 certificates for this custom domain, which you can verify by the Common Name found in the certificate: | ||||||||||||||
|
||||||||||||||
 | ||||||||||||||
|
||||||||||||||
You can also review the certificate in the **Certificates** dashboard: | ||||||||||||||
|
||||||||||||||
 |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -56,6 +56,8 @@ const sidebars = { | |
type: 'category', | ||
label: 'Capabilities', | ||
items: [ | ||
// zero | ||
'docs/capabilities/custom-domains', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Eventually we should probably put these all collected together with a prepended highlight like |
||
// core & open source | ||
// | ||
// Core concepts | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion: "you may want" -> "you'll likely want"