AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Wie richte ich ExternalDNS mit Amazon EKS ein?
Ich möchte ExternalDNS mit meinem Amazon Elastic Kubernetes Service (Amazon EKS) einrichten.
Kurzbeschreibung
Um ExternalDNS zu installieren, verwende AWS Identity and Access Management (IAM)-Berechtigungen, um Amazon EKS den für die Interaktion mit Amazon Route 53 erforderlichen Zugriff zu gewähren.
Hinweis: Bevor du mit der folgenden Lösung beginnst, stelle sicher, dass du über einen Domänennamen und eine von Route 53 gehostete Zone verfügst.
Behebung
IAM-Berechtigungen einrichten und ExternalDNS bereitstellen
Führe die folgenden Schritte aus:
-
Erstelle die folgende Richtlinie, um IAM-Berechtigungen einzurichten, die dem ExternalDNS-Pod Berechtigungen zum Erstellen, Aktualisieren und Löschen von Route-53-Datensätzen in dem AWS-Konto gewähren:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/*" ] }, { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:ListResourceRecordSets", "route53:ListTagsForResource" ], "Resource": [ "*" ] } ] }Hinweis: Du kannst die vorherige Richtlinie ändern, um Aktualisierungen bestimmter gehosteter Zonen-IDs zuzulassen.
-
Verwende die Richtlinie, um eine IAM-Rolle für das Dienstkonto zu erstellen:
eksctl create iamserviceaccount --name SERVICE_ACCOUNT_NAME --namespace NAMESPACE --cluster CLUSTER_NAME --attach-policy-arn IAM_POLICY_ARN --approveHinweis: Ersetze SERVICE_ACCOUNT_NAME durch den Namen deines Dienstkontos, NAMESPACE durch deinen Namespace, CLUSTER_NAME durch den Namen deines Clusters und IAM_POLICY_ARN durch den ARN deiner IAM-Richtlinie.
Führe den folgenden Befehl aus, um den Namen des Dienstkontos zu überprüfen:kubectl get saIn der folgenden Beispielausgabe ist external-dns der Name, der dem Dienstkonto bei seiner Erstellung gegeben wird:
NAME SECRETS AGE default 1 23h external-dns 1 23h -
Führe den folgenden Befehl aus, um festzustellen, ob RBAC in dem Amazon-EKS-Cluster aktiviert ist:
kubectl api-versions | grep rbac.authorization.k8s.ioHinweis: Überprüfe für den vorherigen Befehl die neueste Version von ExternalDNS, die im GitHub-Projekt verfügbar ist.
-
Führe den folgenden Befehl aus, um ExternalDNS bereitzustellen:
kubectl apply DEPLOYMENT_MANIFEST_FILE_NAME.yamlHinweis: Ersetze DEPLOYMENT_MANIFEST_FILE_NAME durch den Dateinamen des Bereitstellungs-Manifests.
Wenn RBAC aktiviert ist, verwende das folgende Manifest, um ExternalDNS bereitzustellen:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-dns labels: app.kubernetes.io/name: external-dns rules: - apiGroups: [""] resources: ["services","endpoints","pods","nodes"] verbs: ["get","watch","list"] - apiGroups: ["extensions","networking.k8s.io"] resources: ["ingresses"] verbs: ["get","watch","list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-dns-viewer labels: app.kubernetes.io/name: external-dns roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: external-dns subjects: - kind: ServiceAccount name: external-dns namespace: default # change to desired namespace: externaldns, kube-addons --- apiVersion: apps/v1 kind: Deployment metadata: name: external-dns labels: app.kubernetes.io/name: external-dns spec: strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: external-dns template: metadata: labels: app.kubernetes.io/name: external-dns spec: serviceAccountName: external-dns containers: - name: external-dns image: registry.k8s.io/external-dns/external-dns:v0.14.0 args: - --source=service - --source=ingress - --domain-filter=example.com # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones - --provider=aws - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - --aws-zone-type=public # only look at public hosted zones (valid values are public, private or no value for both) - --registry=txt - --txt-owner-id=external-dns env: - name: AWS_DEFAULT_REGION value: eu-west-1 # change to region where EKS is installedWenn RBAC nicht aktiviert ist, verwende das folgende Manifest, um ExternalDNS bereitzustellen:
apiVersion: apps/v1 kind: Deployment metadata: name: external-dns labels: app.kubernetes.io/name: external-dns spec: strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: external-dns template: metadata: labels: app.kubernetes.io/name: external-dns spec: containers: - name: external-dns image: registry.k8s.io/external-dns/external-dns:v0.14.0 args: - --source=service - --source=ingress - --domain-filter=example.com # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones - --provider=aws - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - --aws-zone-type=public # only look at public hosted zones (valid values are public, private or no value for both) - --registry=txt - --txt-owner-id=my-hostedzone-identifier env: - name: AWS_DEFAULT_REGION value: eu-west-1 # change to region where EKS is installed -
Führe den folgenden Befehl aus, um zu überprüfen, ob die Bereitstellung erfolgreich ist:
kubectl get deploymentsBeispielausgabe:
NAME READY UP-TO-DATE AVAILABLE AGE external-dns 1/1 1 1 85mOder überprüfe die Protokolle, um sicherzustellen, dass die Datensätze aktualisiert wurden:
kubectl logs external-dns-9f85d8d5b-sx5fBeispielausgabe:
.... time="2023-12-14T17:16:16Z" level=info msg="Instantiating new Kubernetes client" time="2023-12-14T17:16:16Z" level=info msg="Using inCluster-config based on serviceaccount-token" time="2023-12-14T17:16:16Z" level=info msg="Created Kubernetes client https://10.100.0.1:443" time="2023-12-14T17:16:18Z" level=info msg="Applying provider record filter for domains: [xxxxx.people.aws.dev. .xxxxx.people.aws.dev. xxxxx.people.aws.dev. .xxxxx.people.aws.dev.]" time="2023-12-14T17:16:18Z" level=info msg="All records are already up to date" ....
Überprüfen von ExternalDNS
Gehe wie folgt vor, um zu überprüfen, ob ExternalDNS korrekt eingerichtet ist:
-
Erstelle einen Dienst, der als LoadBalancer verfügbar gemacht wird. Der Dienst muss extern über den Domainnamen weitergeleitet werden, der auf Route 53 gehostet wird:
kubectl apply SERVICE_MANIFEST_FILE_NAME.yaml Note: Replace SERVICE_MANIFEST_FILE_NAME with your service manifest's file name. Manifest: apiVersion: v1 kind: Service metadata: name: nginx annotations: external-dns.alpha.kubernetes.io/hostname: nginx.xxxxx.people.aws.dev spec: ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app: nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80 name: httpHinweis: ExternalDNS verwendet die Anmerkung external-dns.alpha.kubernetes.io/hostname für Dienste. Es verwendet auch die zugehörigen Werte. Um einem Dienst mehrere Namen zuzuweisen, konfiguriere die Anmerkung external-dns.alpha.kubernetes.io/hostname mit einem Kommatrennzeichen.
-
Stelle sicher, dass der NGINX-Dienst mit dem Typ LoadBalancer erstellt wird:
kubectl get svcBeispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 05h nginx LoadBalancer 10.100.254.68 xxxxyyyyzzzz-123456789.eu-west-1.elb.amazonaws.com 80:30792/TCP 74mHinweis: Der Dienst erstellt automatisch einen Route-53-Datensatz für die gehostete Zone.
-
Führe den folgenden Befehl aus, um die Protokolle anzuzeigen, und bestätige, dass der Route-53-Datensatz erfolgreich erstellt wurde:
kubectl logs external-dns-9f85d8d5b-sx5fgBeispielausgabe:
... time="2023-12-14T17:19:19Z" level=info msg="Desired change: CREATE cname-nginx.xxxxx.people.aws.dev TXT [Id: /hostedzone/Z0786329GDVAZMXYZ]" time="2023-12-14T17:19:19Z" level=info msg="Desired change: CREATE nginx.xxxxx.people.aws.dev A [Id: /hostedzone/Z0786329GDVAZMXYZ]" time="2023-12-14T17:19:19Z" level=info msg="Desired change: CREATE nginx.xxxxx.people.aws.dev TXT [Id: /hostedzone/Z0786329GDVAZMXYZ]" time="2023-12-14T17:19:20Z" level=info msg="3 record(s) in zone xxxxx.people.aws.dev. [Id: /hostedzone/Z0786329GDVAZMXYZ] were successfully updated" ...
- Themen
- Containers
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren
AWS OFFICIALAktualisiert vor 5 Monaten
AWS OFFICIALAktualisiert vor 5 Monaten