@@ -24,8 +24,8 @@ package main
2424
2525import (
2626 "fmt"
27+ "net/netip"
2728 "os"
28- "strings"
2929 "time"
3030
3131 "github.com/matheuscscp/gke-metadata-server/internal/googlecredentials"
@@ -35,6 +35,7 @@ import (
3535 watchnode "github.com/matheuscscp/gke-metadata-server/internal/node/watch"
3636 listpods "github.com/matheuscscp/gke-metadata-server/internal/pods/list"
3737 watchpods "github.com/matheuscscp/gke-metadata-server/internal/pods/watch"
38+ "github.com/matheuscscp/gke-metadata-server/internal/redirect"
3839 "github.com/matheuscscp/gke-metadata-server/internal/server"
3940 "github.com/matheuscscp/gke-metadata-server/internal/serviceaccounts"
4041 getserviceaccount "github.com/matheuscscp/gke-metadata-server/internal/serviceaccounts/get"
@@ -48,7 +49,7 @@ import (
4849
4950func newServerCommand () * cobra.Command {
5051 var (
51- serverAddr string
52+ serverPort int
5253 webhookAddr string
5354 workloadIdentityProvider string
5455 defaultNodeServiceAccountName string
@@ -77,6 +78,17 @@ func newServerCommand() *cobra.Command {
7778 if nodeName == "" {
7879 return fmt .Errorf ("NODE_NAME environment variable must be specified" )
7980 }
81+ podIP := os .Getenv ("POD_IP" )
82+ if podIP == "" {
83+ return fmt .Errorf ("POD_IP environment variable must be specified" )
84+ }
85+ emulatorIP , err := netip .ParseAddr (podIP )
86+ if err != nil {
87+ return fmt .Errorf ("error parsing POD_IP environment variable: %w" , err )
88+ }
89+ if ! emulatorIP .Is4 () {
90+ return fmt .Errorf ("POD_IP environment variable must be an IPv4 address" )
91+ }
8092 if defaultNodeServiceAccountName == "" {
8193 return fmt .Errorf ("--default-node-service-account-name argument must be specified" )
8294 }
@@ -104,6 +116,13 @@ func newServerCommand() *cobra.Command {
104116 }
105117 }()
106118
119+ // install ebpf redirect program
120+ redirBPF , err := redirect .LoadAndAttachBPF (emulatorIP , serverPort , logging .Debug ())
121+ if err != nil {
122+ return fmt .Errorf ("error loading eBPF redirect program: %w" , err )
123+ }
124+ defer redirBPF .Close ()
125+
107126 // create clients
108127 kubeClient , err := createKubernetesClient (ctx )
109128 if err != nil {
@@ -213,7 +232,7 @@ func newServerCommand() *cobra.Command {
213232 }
214233 s := server .New (ctx , server.ServerOptions {
215234 NodeName : nodeName ,
216- ServerAddr : serverAddr ,
235+ ServerPort : serverPort ,
217236 Pods : pods ,
218237 Node : node ,
219238 ServiceAccounts : serviceAccounts ,
@@ -226,7 +245,7 @@ func newServerCommand() *cobra.Command {
226245 webhookServer := webhook .New (ctx , webhook.ServerOptions {
227246 ServerAddr : webhookAddr ,
228247 InitNetworkImage : webhookInitNetworkImage ,
229- DaemonSetPort : strings . Split ( serverAddr , ":" )[ 1 ] ,
248+ DaemonSetPort : serverPort ,
230249 MetricsRegistry : metricsRegistry ,
231250 })
232251
@@ -243,7 +262,7 @@ func newServerCommand() *cobra.Command {
243262 },
244263 }
245264
246- cmd .Flags ().StringVar ( & serverAddr , "server-addr " , ": 8080" ,
265+ cmd .Flags ().IntVar ( & serverPort , "server-port " , 8080 ,
247266 "Network address where the metadata server must listen on" )
248267 cmd .Flags ().StringVar (& webhookAddr , "webhook-addr" , ":8081" ,
249268 "Network address where the webhook server must listen on" )
0 commit comments