Use external-dns to auto-bond route53 in EKS
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,Install EKS clusterHow to install eksctl# eksctl create cluster -f cluster.yaml apiVersion: eksctl.
千家信息网最后更新 2025年02月03日Use external-dns to auto-bond route53 in EKS
Install EKS cluster
How to install eksctl
# eksctl create cluster -f cluster.yaml apiVersion: eksctl.io/v1alpha5kind: ClusterConfig metadata: name: cluster01 region: ap-northeast-2 vpc: subnets: public: ap-northeast-2a: { id: subnet-dbbb4fb2 } ap-northeast-2b: { id: subnet-2b4fa650 } ap-northeast-2c: { id: subnet-99182fd3 } private: ap-northeast-2a: { id: subnet-dbbb4fb2 } ap-northeast-2b: { id: subnet-2b4fa650 } ap-northeast-2c: { id: subnet-99182fd3 } nodeGroups: - name: ng01 labels: { role: workers } instanceType: t2.xlarge minSize: 2 maxSize: 8 volumeSize: 100 volumeType: gp2 ami: auto amiFamily: Ubuntu1804 #privateNetworking: true ssh: publicKeyName: gexj #publicKeyPath: ~/.ssh/gexj.pub
Record run result
[ℹ] using region ap-northeast-2[✔] using existing VPC (vpc-1fa75276) and subnets (private:[subnet-2b4fa650 subnet-99182fd3 subnet-dbbb4fb2] public:[subnet-dbbb4fb2 subnet-2b4fa650 subnet-99182fd3])[!] custom VPC/subnets will be used; if resulting cluster doesn't function as expected, make sure to review the configuration of VPC/subnets[ℹ] nodegroup "ng01" will use "ami-0f37e6cfe5a2e9281" [Ubuntu1804/1.13][ℹ] using EC2 key pair "gexj"[ℹ] using Kubernetes version 1.13[ℹ] creating EKS cluster "cluster01" in "ap-northeast-2" region[ℹ] 1 nodegroup (ng01) was included[ℹ] will create a CloudFormation stack for cluster itself and 1 nodegroup stack(s)[ℹ] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=ap-northeast-2 --name=cluster01'[ℹ] CloudWatch logging will not be enabled for cluster "cluster01" in "ap-northeast-2"[ℹ] you can enable it with 'eksctl utils update-cluster-logging --region=ap-northeast-2 --name=cluster01'[ℹ] 2 sequential tasks: { create cluster control plane "cluster01", create nodegroup "ng01" }[ℹ] building cluster stack "eksctl-cluster01-cluster"[ℹ] deploying stack "eksctl-cluster01-cluster"[ℹ] building nodegroup stack "eksctl-cluster01-nodegroup-ng01"[ℹ] deploying stack "eksctl-cluster01-nodegroup-ng01"[✔] all EKS cluster resource for "cluster01" had been created[✔] saved kubeconfig as "/root/.kube/config"[ℹ] adding role "arn:aws:iam::647035961056:role/eksctl-cluster01-nodegroup-ng01-NodeInstanceRole-GDG5Y6EPZ0B8" to auth ConfigMap[ℹ] nodegroup "ng01" has 0 node(s)[ℹ] waiting for at least 2 node(s) to become ready in "ng01"[ℹ] nodegroup "ng01" has 2 node(s)[ℹ] node "ip-172-31-25-102.ap-northeast-2.compute.internal" is ready[ℹ] node "ip-172-31-9-210.ap-northeast-2.compute.internal" is ready[ℹ] kubectl command should work with "/root/.kube/config", try 'kubectl get nodes'[✔] EKS cluster "cluster01" in "ap-northeast-2" region is ready
Add IAM Permissions to the roles created above
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/*" ] }, { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:ListResourceRecordSets" ], "Resource": [ "*" ] } ]}
Set up a hosted zone
## If you prefer to try-out ExternalDNS in one of the existing hosted-zones you can skip this step # aws route53 create-hosted-zone --name "gexj.club." --caller-reference "gexj-clube-$(date +%s)" |
{ "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z3P062U2BQWNDS", "HostedZone": { "Id": "/hostedzone/Z3P062U2BQWNDS", "Name": "gexj.club.", "CallerReference": "gexj-clube-1568880027", "Config": { "PrivateZone": false }, "ResourceRecordSetCount": 2 }, "ChangeInfo": { "Id": "/change/C1GWAKWYESG64Y", "Status": "PENDING", "SubmittedAt": "2019-09-19T08:00:28.557Z" }, "DelegationSet": { "NameServers": [ "ns-771.awsdns-32.net", "ns-378.awsdns-47.com", "ns-1192.awsdns-21.org", "ns-1786.awsdns-31.co.uk" ] }}
Deploy ExternalDNS
$ kubectl apply -f external-dns-with-rbac.yaml
# kubectl logs external-dns-5454846d9b-sdjzd -ftime="2019-09-19T08:06:43Z" level=info msg="config: {Master: KubeConfig: RequestTimeout:30s IstioIngressGatewayServices:[istio-system/istio-ingressgateway] ContourLoadBalancerService:heptio-contour/contour Sources:[service ingress] Namespace: AnnotationFilter: FQDNTemplate: CombineFQDNAndAnnotation:false IgnoreHostnameAnnotation:false Compatibility: PublishInternal:false PublishHostIP:false ConnectorSourceServer:localhost:8080 Provider:aws GoogleProject: DomainFilter:[gexj.club] ExcludeDomains:[] ZoneIDFilter:[] AlibabaCloudConfigFile:/etc/kubernetes/alibaba-cloud.json AlibabaCloudZoneType: AWSZoneType:public AWSZoneTagFilter:[] AWSAssumeRole: AWSBatchChangeSize:1000 AWSBatchChangeInterval:1s AWSEvaluateTargetHealth:true AWSAPIRetries:3 AWSPreferCNAME:false AzureConfigFile:/etc/kubernetes/azure.json AzureResourceGroup: CloudflareProxied:false CloudflareZonesPerPage:50 CoreDNSPrefix:/skydns/ RcodezeroTXTEncrypt:false InfobloxGridHost: InfobloxWapiPort:443 InfobloxWapiUsername:admin InfobloxWapiPassword: InfobloxWapiVersion:2.3.1 InfobloxSSLVerify:true InfobloxView: InfobloxMaxResults:0 DynCustomerName: DynUsername: DynPassword: DynMinTTLSeconds:0 OCIConfigFile:/etc/kubernetes/oci.yaml InMemoryZones:[] PDNSServer:http://localhost:8081 PDNSAPIKey: PDNSTLSEnabled:false TLSCA: TLSClientCert: TLSClientCertKey: Policy:upsert-only Registry:txt TXTOwnerID:/hostedzone/Z3P062U2BQWNDS TXTPrefix: Interval:1m0s Once:false DryRun:false LogFormat:text MetricsAddress::7979 LogLevel:info TXTCacheInterval:0s ExoscaleEndpoint:https://api.exoscale.ch/dns ExoscaleAPIKey: ExoscaleAPISecret: CRDSourceAPIVersion:externaldns.k8s.io/v1alpha1 CRDSourceKind:DNSEndpoint ServiceTypeFilter:[] CFAPIEndpoint: CFUsername: CFPassword: RFC2136Host: RFC2136Port:0 RFC2136Zone: RFC2136Insecure:false RFC2136TSIGKeyName: RFC2136TSIGSecret: RFC2136TSIGSecretAlg: RFC2136TAXFR:false NS1Endpoint: NS1IgnoreSSL:false TransIPAccountName: TransIPPrivateKeyFile:}"time="2019-09-19T08:06:43Z" level=info msg="Created Kubernetes client https://10.100.0.1:443"time="2019-09-19T08:06:47Z" level=info msg="All records are already up to date
apiVersion: v1kind: ServiceAccountmetadata: name: external-dns---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRolemetadata: name: external-dnsrules:- apiGroups: [""] resources: ["services"] verbs: ["get","watch","list"]- apiGroups: [""] resources: ["pods"] verbs: ["get","watch","list"]- apiGroups: ["extensions"] resources: ["ingresses"] verbs: ["get","watch","list"]- apiGroups: [""] resources: ["nodes"] verbs: ["list","watch"]---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata: name: external-dns-viewerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: external-dnssubjects:- kind: ServiceAccount name: external-dns namespace: default---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: external-dnsspec: strategy: type: Recreate template: metadata: labels: app: external-dns spec: serviceAccountName: external-dns containers: - name: external-dns image: registry.opensource.zalan.do/teapot/external-dns:latest args: - --source=service - --source=ingress - --domain-filter=gexj.club # 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=/hostedzone/Z3P062U2BQWNDS securityContext: fsGroup: 65534 # For ExternalDNS to be able to read Kubernetes and AWS token files
Verify ExternalDNS works (Service example)
/ / After roughly two minutes check that a corresponding DNS record for your service was created. # aws route53 list-resource-record-sets --output json --hosted-zone-id "/hostedzone/Z3P062U2BQWNDS" --query "ResourceRecordSets[?Name == 'nginx.gexj.club.']|[?Type == 'A']" |
[ { "Name": "nginx.gexj.club.", "Type": "A", "AliasTarget": { "HostedZoneId": "ZWKZPGTI48KDX", "DNSName": "ada69bd16dab411e9b32f061aa86c2a6-1959369398.ap-northeast-2.elb.amazonaws.com.", "EvaluateTargetHealth": true } }]
apiVersion: v1kind: Servicemetadata: name: nginx annotations: external-dns.alpha.kubernetes.io/hostname: nginx.gexj.clubspec: type: LoadBalancer ports: - port: 80 name: http targetPort: 80 selector: app: nginx --- apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nginxspec: template: metadata: labels: app: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80 name: http
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全工作推进会主持词
中国服务器市场研究报告
乡政府网络安全实施方案
小学生网络安全在我身边班会
腾讯手游助手请求云服务器
我的世界服务器扫地僧怎么造
服务器挂机池图片大全
免费3d网游韩国服务器
连接数据库常见错误
淄川纺织管理软件开发
服务器主板是什么样子的
数据库和编程技术
怎么查手机服务器端口号
服务器挂签到
智能门锁软件开发
开发微信小程序需要连数据库吗
上海护壹软件开发是做什么的
宅萌互联网科技
uc浏览器关闭网络安全检测
工程网络技术是什么意思
软件开发优秀员工自荐
荆州订制软件开发企业
软件开发群体化方法
数据库suspect
无意加入一个玩家不多的服务器
数据库软件数量级
网络安全获奖ppt
mpp数据库关键技术
erp软件开发工具有那些
软件开发的工具和技术