Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix linkerd dg endpoints to work with IPv6 #12541

Merged
merged 1 commit into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions cli/cmd/endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ package cmd
import (
"bytes"
"context"
"encoding/binary"
"encoding/json"
"errors"
"fmt"
"net"
"os"
"sort"
"strings"
Expand All @@ -17,6 +15,7 @@ import (
destinationPb "github.com/linkerd/linkerd2-proxy-api/go/destination"
netPb "github.com/linkerd/linkerd2-proxy-api/go/net"
"github.com/linkerd/linkerd2/controller/api/destination"
"github.com/linkerd/linkerd2/pkg/addr"
pkgcmd "github.com/linkerd/linkerd2/pkg/cmd"
"github.com/linkerd/linkerd2/pkg/k8s"
log "github.com/sirupsen/logrus"
Expand Down Expand Up @@ -218,10 +217,11 @@ func requestEndpointsFromAPI(client destinationPb.DestinationClient, token strin
}

func getIP(tcpAddr *netPb.TcpAddress) string {
ip := tcpAddr.GetIp().GetIpv4()
b := make([]byte, 4)
binary.BigEndian.PutUint32(b, ip)
return net.IP(b).String()
ip := addr.FromProxyAPI(tcpAddr.GetIp())
if ip == nil {
return ""
}
return addr.PublicIPToString(ip)
}

func renderEndpoints(endpoints endpointsInfo, options *endpointsOptions) string {
Expand Down
10 changes: 6 additions & 4 deletions pkg/addr/addr.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func PublicIPToString(ip *l5dNetPb.IPAddress) string {

// ProxyAddressToString formats a Proxy API TCPAddress as a string.
func ProxyAddressToString(addr *pb.TcpAddress) string {
vizIP := proxyToVizIPAddr(addr.GetIp())
vizIP := FromProxyAPI(addr.GetIp())
if vizIP == nil {
return ""
}
Expand Down Expand Up @@ -90,21 +90,23 @@ func ParsePublicIP(ip string) (*l5dNetPb.IPAddress, error) {
if err != nil {
return nil, err
}
return proxyToVizIPAddr(addr), nil
return FromProxyAPI(addr), nil
}

// NetToPublic converts a Proxy API TCPAddress to a Viz API
// TCPAddress.
func NetToPublic(net *pb.TcpAddress) *l5dNetPb.TcpAddress {
ip := proxyToVizIPAddr(net.GetIp())
ip := FromProxyAPI(net.GetIp())

return &l5dNetPb.TcpAddress{
Ip: ip,
Port: net.GetPort(),
}
}

func proxyToVizIPAddr(net *pb.IPAddress) *l5dNetPb.IPAddress {
// FromProxyAPI casts an IPAddress from the linkerd2-proxy-api.go.net package
// to the linkerd2.controller.gen.common.net package
func FromProxyAPI(net *pb.IPAddress) *l5dNetPb.IPAddress {
switch ip := net.GetIp().(type) {
case *pb.IPAddress_Ipv6:
return &l5dNetPb.IPAddress{
Expand Down
Loading