diff --git a/internal/rpc/services/service_dns_domain.go b/internal/rpc/services/service_dns_domain.go index debb8453..2c2de1bc 100644 --- a/internal/rpc/services/service_dns_domain.go +++ b/internal/rpc/services/service_dns_domain.go @@ -470,6 +470,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, // 新增的节点域名 var nodeKeys = []string{} + var addingNodeRecordKeysMap = map[string]bool{} // clusterDnsName_type_ip_route for _, node := range nodes { ipAddresses, err := models.SharedNodeIPAddressDAO.FindNodeAccessAndUpIPAddresses(tx, int64(node.Id), nodeconfigs.NodeRoleNode) if err != nil { @@ -499,7 +500,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, if net.ParseIP(ip) == nil { continue } - key := ip + "_" + route + var key = ip + "_" + route nodeKeys = append(nodeKeys, key) record, ok := nodeRecordMapping[key] if !ok { @@ -507,6 +508,14 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, if utils.IsIPv6(ip) { recordType = dnstypes.RecordTypeAAAA } + + // 避免添加重复的记录 + var fullKey = clusterDnsName + "_" + recordType + "_" + ip + "_" + route + if addingNodeRecordKeysMap[fullKey] { + continue + } + addingNodeRecordKeysMap[fullKey] = true + result = append(result, maps.Map{ "action": "create", "record": &dnstypes.Record{ diff --git a/internal/tasks/dns_task_executor.go b/internal/tasks/dns_task_executor.go index 36f6c255..26c2e429 100644 --- a/internal/tasks/dns_task_executor.go +++ b/internal/tasks/dns_task_executor.go @@ -361,6 +361,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error { return err } var isChanged = false + var addingNodeRecordKeysMap = map[string]bool{} // clusterDnsName_type_ip_route for _, node := range nodes { routes, err := node.DNSRouteCodesForDomainId(domainId) if err != nil { @@ -398,6 +399,14 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error { if utils.IsIPv6(ip) { recordType = dnstypes.RecordTypeAAAA } + + // 避免添加重复的记录 + var fullKey = clusterDNSName + "_" + recordType + "_" + ip + "_" + route + if addingNodeRecordKeysMap[fullKey] { + continue + } + addingNodeRecordKeysMap[fullKey] = true + err = manager.AddRecord(domain, &dnstypes.Record{ Id: "", Name: clusterDNSName,