github.com/kiali/kiali@v1.84.0/business/checkers/serviceentries/workload_entry_address_match.go (about) 1 package serviceentries 2 3 import ( 4 networking_v1beta1 "istio.io/client-go/pkg/apis/networking/v1beta1" 5 "k8s.io/apimachinery/pkg/labels" 6 7 "github.com/kiali/kiali/models" 8 ) 9 10 type HasMatchingWorkloadEntryAddress struct { 11 ServiceEntry *networking_v1beta1.ServiceEntry 12 WorkloadEntries map[string][]string 13 } 14 15 const MeshInternal = 1 16 17 func (in HasMatchingWorkloadEntryAddress) Check() ([]*models.IstioCheck, bool) { 18 validations := make([]*models.IstioCheck, 0) 19 20 if in.ServiceEntry.Spec.Location != MeshInternal { 21 return validations, true 22 } 23 24 if in.ServiceEntry.Spec.WorkloadSelector == nil { 25 return validations, true 26 } 27 28 var targetAddresses []string 29 seSelector := labels.Set(in.ServiceEntry.Spec.WorkloadSelector.Labels).AsSelector() 30 31 for labelsMap, weAddressMap := range in.WorkloadEntries { 32 workloadLabelsSet, err := labels.ConvertSelectorToLabelsMap(labelsMap) 33 if err != nil { 34 continue 35 } 36 37 if seSelector.Matches(workloadLabelsSet) { 38 targetAddresses = append(targetAddresses, weAddressMap...) 39 } 40 } 41 42 if targetAddresses == nil { 43 return validations, true 44 } 45 46 seAddresses := in.ServiceEntryAddressMap() 47 48 for _, weAddress := range targetAddresses { 49 if _, found := seAddresses[weAddress]; !found { 50 // Add validation: WorkloadEntry.Address should be part of the Service Entry Addresses list 51 validation := models.Build("serviceentries.workloadentries.addressmatch", "spec/addresses") 52 validations = append(validations, &validation) 53 } 54 } 55 56 return validations, true 57 } 58 59 func GroupWorkloadEntriesByLabels(workloads []*networking_v1beta1.WorkloadEntry) map[string][]string { 60 workloadEntriesMap := map[string][]string{} 61 for _, we := range workloads { 62 selector := labels.Set(we.Spec.Labels).String() 63 workloadEntriesMap[selector] = append(workloadEntriesMap[selector], we.Spec.Address) 64 } 65 return workloadEntriesMap 66 } 67 68 func (in HasMatchingWorkloadEntryAddress) ServiceEntryAddressMap() map[string]bool { 69 addrMap := map[string]bool{} 70 for _, addr := range in.ServiceEntry.Spec.Addresses { 71 addrMap[addr] = false 72 } 73 return addrMap 74 }