apiVersion: v1 kind: Pod metadata: name: k8s-discovery-test namespace: redis-demo spec: containers: - name: test image: alpine:latest command: ["sh", "-c"] args: - | echo "=== Installing Go ===" apk add --no-cache go echo "=== Building discovery tool ===" mkdir -p /app/discovery cat > /app/discovery/main.go << 'EOF' package main import ( "fmt" "net" "strings" ) func main() { fmt.Println("=== Kubernetes Service Discovery Test ===") headlessAddr := "redis-headless.redis-demo.svc.cluster.local" fmt.Printf("šŸ” Discovering service: %s\n", headlessAddr) serviceInfo, err := parseHeadlessServiceAddr(headlessAddr) if err != nil { fmt.Printf("āŒ Failed to discover service: %v\n", err) return } fmt.Println("\nšŸ“‹ Service Information:") fmt.Printf(" Name: %s\n", serviceInfo.Name) fmt.Printf(" Namespace: %s\n", serviceInfo.Namespace) if len(serviceInfo.All) > 0 { fmt.Printf("\n🌐 All Pod IPs (%d):\n", len(serviceInfo.All)) for idx, ip := range serviceInfo.All { podName := fmt.Sprintf("%s-%d", serviceInfo.Name, idx) if idx == 0 { fmt.Printf(" šŸ“Œ Master: %s -> %s\n", podName, ip) } else { fmt.Printf(" šŸ“Š Replica: %s -> %s\n", podName, ip) } } } fmt.Println("\nšŸŽ‰ Service discovery completed successfully!") } type ServiceInfo struct { Name string All []string } func parseHeadlessServiceAddr(headlessAddr string) (*ServiceInfo, error) { resolver := &net.Resolver{PreferGo: true} addrs, err := resolver.LookupIPAddr(headlessAddr) if err != nil { return nil, fmt.Errorf("DNS query failed: %v", err) } if len(addrs) == 0 { return nil, fmt.Errorf("no records found") } var podIPs []string for _, addr := range addrs { podIPs = append(podIPs, addr.String()) } parts := strings.Split(headlessAddr, ".") if len(parts) < 4 { return nil, fmt.Errorf("invalid format") } serviceName := parts[0] namespace := parts[1] return &ServiceInfo{ Name: serviceName, All: podIPs, }, nil } EOF echo "=== Running discovery tool ===" cd /app/discovery && go run main.go echo "=== Sleeping for 30s ===" sleep 30 volumeMounts: - name: app-volume mountPath: /app volumes: - name: app-volume emptyDir: {} restartPolicy: Never