$ oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json
You can create dns records on Google Cloud Platform (GCP) by using the External dns Operator.
Using the External dns Operator on a cluster with GCP Workload Identity enabled is not supported. For more information about the GCP Workload Identity, see Using manual mode with GCP Workload Identity. |
You can create dns records on a public managed zone for GCP by using the External dns Operator.
You must have administrator privileges.
Copy the gcp-credentials
secret in the encoded-gcloud.json
file by running the following command:
$ oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json
Export your Google credentials by running the following command:
$ export GOOGLE_CREDENTIALS=decoded-gcloud.json
Activate your account by using the following command:
$ gcloud auth activate-service-account <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json
Set your project by running the following command:
$ gcloud config set project <project_id as per decoded-gcloud.json>
Get a list of routes by running the following command:
$ oc get routes --all-namespaces | grep console
openshift-console console console-openshift-console.apps.test.gcp.example.com console https reencrypt/Redirect None
openshift-console downloads downloads-openshift-console.apps.test.gcp.example.com downloads http edge/Redirect None
Get a list of managed zones by running the following command:
$ gcloud dns managed-zones list | grep test.gcp.example.com
qe-cvs4g-private-zone test.gcp.example.com
Create a YAML file, for example, external-dns-sample-gcp.yaml
, that defines the Externaldns
object:
external-dns-sample-gcp.yaml
fileapiVersion: externaldns.olm.openshift.io/v1beta1
kind: Externaldns
metadata:
name: sample-gcp (1)
spec:
domains:
- filterType: Include (2)
matchType: Exact (3)
name: test.gcp.example.com (4)
provider:
type: GCP (5)
source:
openshiftRouteOptions: (6)
routerName: default (7)
type: OpenShiftRoute (8)
1 | Specifies the External dns name. |
2 | By default, all hosted zones are selected as potential targets. You can include your hosted zone. |
3 | The domain of the target must match the string defined by the name key. |
4 | Specify the exact domain of the zone you want to update. The hostname of the routes must be subdomains of the specified domain. |
5 | Defines the provider type. |
6 | You can define options for the source of dns records. |
7 | If the source type is OpenShiftRoute , you can pass the OpenShift Ingress Controller name. External dns selects the canonical hostname of that router as the target while creating CNAME record. |
8 | Defines the route resource as the source for GCP dns records. |
Check the dns records created for OKD routes by running the following command:
$ gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console