1
1
package aws
2
2
3
3
import (
4
+ "net"
5
+ "os"
6
+ "strings"
7
+
4
8
"github.com/aws/aws-sdk-go/aws"
5
9
"github.com/aws/aws-sdk-go/aws/endpoints"
6
10
"github.com/aws/aws-sdk-go/aws/session"
7
11
"github.com/pkg/errors"
8
12
"github.com/prometheus/client_golang/prometheus"
9
- "os"
10
13
epresolver "sigs.k8s.io/aws-load-balancer-controller/pkg/aws/endpoints"
11
14
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/metrics"
12
15
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
@@ -44,9 +47,28 @@ type Cloud interface {
44
47
45
48
// NewCloud constructs new Cloud implementation.
46
49
func NewCloud (cfg CloudConfig , metricsRegisterer prometheus.Registerer ) (Cloud , error ) {
50
+ hasIPv4 := true
51
+ addrs , err := net .InterfaceAddrs ()
52
+ if err == nil {
53
+ hasIPv4 = false
54
+ for _ , addr := range addrs {
55
+ str := addr .String ()
56
+ if ! strings .HasPrefix (str , "127." ) && ! strings .Contains (str , ":" ) {
57
+ hasIPv4 = true
58
+ break
59
+ }
60
+ }
61
+ }
62
+
47
63
endpointsResolver := epresolver .NewResolver (cfg .AWSEndpoints )
48
64
metadataCFG := aws .NewConfig ().WithEndpointResolver (endpointsResolver )
49
- metadataSess := session .Must (session .NewSession (metadataCFG ))
65
+ opts := session.Options {}
66
+ opts .Config .MergeIn (metadataCFG )
67
+ if ! hasIPv4 {
68
+ opts .EC2IMDSEndpointMode = endpoints .EC2IMDSEndpointModeStateIPv6
69
+ }
70
+
71
+ metadataSess := session .Must (session .NewSessionWithOptions (opts ))
50
72
metadata := services .NewEC2Metadata (metadataSess )
51
73
if len (cfg .VpcID ) == 0 {
52
74
vpcId , err := metadata .VpcID ()
@@ -72,7 +94,12 @@ func NewCloud(cfg CloudConfig, metricsRegisterer prometheus.Registerer) (Cloud,
72
94
cfg .Region = region
73
95
}
74
96
awsCFG := aws .NewConfig ().WithRegion (cfg .Region ).WithSTSRegionalEndpoint (endpoints .RegionalSTSEndpoint ).WithMaxRetries (cfg .MaxRetries ).WithEndpointResolver (endpointsResolver )
75
- sess := session .Must (session .NewSession (awsCFG ))
97
+ opts = session.Options {}
98
+ opts .Config .MergeIn (awsCFG )
99
+ if ! hasIPv4 {
100
+ opts .EC2IMDSEndpointMode = endpoints .EC2IMDSEndpointModeStateIPv6
101
+ }
102
+ sess := session .Must (session .NewSessionWithOptions (opts ))
76
103
injectUserAgent (& sess .Handlers )
77
104
78
105
if cfg .ThrottleConfig != nil {
0 commit comments