Skip to content

Commit c005e86

Browse files
authored
Merge pull request #18155 from hakman/azure-provider-id
azure: Set provider ID when starting kubelet
2 parents 4428545 + b4d3067 commit c005e86

4 files changed

Lines changed: 16 additions & 47 deletions

File tree

nodeup/pkg/model/kubelet.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"k8s.io/kops/pkg/systemd"
4343
"k8s.io/kops/upup/pkg/fi"
4444
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
45+
azurecloud "k8s.io/kops/upup/pkg/fi/cloudup/azure"
4546
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
4647
"k8s.io/kops/util/pkg/distributions"
4748
kubeletv1 "k8s.io/kubelet/config/v1"
@@ -93,6 +94,12 @@ func (b *KubeletBuilder) Build(c *fi.NodeupModelBuilderContext) error {
9394
return err
9495
}
9596
providerID = fmt.Sprintf("aws:///%s/%s", instanceIdentity.AvailabilityZone, instanceIdentity.InstanceID)
97+
} else if b.CloudProvider() == kops.CloudProviderAzure {
98+
metadata, err := azurecloud.QueryComputeInstanceMetadata()
99+
if err != nil {
100+
return fmt.Errorf("error querying Azure instance metadata: %v", err)
101+
}
102+
providerID = "azure://" + metadata.ResourceID
96103
}
97104

98105
t, err := buildKubeletComponentConfig(kubeletConfig, providerID)

pkg/nodeidentity/azure/client.go

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@ package azure
1818

1919
import (
2020
"context"
21-
"encoding/json"
2221
"fmt"
23-
"io"
24-
"net/http"
2522
"strings"
2623

2724
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
2825
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
2926
compute "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
27+
azurecloud "k8s.io/kops/upup/pkg/fi/cloudup/azure"
3028
)
3129

3230
// client is an Azure client.
@@ -38,7 +36,7 @@ type client struct {
3836

3937
// newClient returns a new Client.
4038
func newClient() (*client, error) {
41-
metadata, err := queryComputeInstanceMetadata()
39+
metadata, err := azurecloud.QueryComputeInstanceMetadata()
4240
if err != nil {
4341
return nil, fmt.Errorf("error querying instance metadata: %s", err)
4442
}
@@ -94,40 +92,3 @@ func (c *client) getVMTags(ctx context.Context, providerID string) (map[string]*
9492
return nil, fmt.Errorf("unsupported resource type %q for %q", res.ResourceType, providerID)
9593
}
9694
}
97-
98-
type instanceMetadata struct {
99-
SubscriptionID string `json:"subscriptionId"`
100-
ResourceGroupName string `json:"resourceGroupName"`
101-
}
102-
103-
// queryComputeInstanceMetadata queries Azure Instance Metadata.
104-
// https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service
105-
func queryComputeInstanceMetadata() (*instanceMetadata, error) {
106-
client := &http.Client{}
107-
req, err := http.NewRequest("GET", "http://169.254.169.254/metadata/instance/compute", nil)
108-
if err != nil {
109-
return nil, fmt.Errorf("error creating a new request: %s", err)
110-
}
111-
req.Header.Add("Metadata", "True")
112-
113-
q := req.URL.Query()
114-
q.Add("api-version", "2025-04-07")
115-
q.Add("format", "json")
116-
req.URL.RawQuery = q.Encode()
117-
118-
resp, err := client.Do(req)
119-
if err != nil {
120-
return nil, fmt.Errorf("error sending request to the metadata server: %s", err)
121-
}
122-
123-
defer resp.Body.Close()
124-
body, err := io.ReadAll(resp.Body)
125-
if err != nil {
126-
return nil, fmt.Errorf("error reading a response from the metadata server: %s", err)
127-
}
128-
metadata := &instanceMetadata{}
129-
if err := json.Unmarshal(body, metadata); err != nil {
130-
return nil, fmt.Errorf("error unmarshalling metadata: %s", err)
131-
}
132-
return metadata, nil
133-
}

upup/pkg/fi/cloudup/azure/authenticator.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func NewAzureAuthenticator() (bootstrap.Authenticator, error) {
3737
}
3838

3939
func (h *azureAuthenticator) CreateToken(body []byte) (string, error) {
40-
metadata, err := queryComputeInstanceMetadata()
40+
metadata, err := QueryComputeInstanceMetadata()
4141
if err != nil {
4242
return "", fmt.Errorf("querying instance metadata: %w", err)
4343
}
@@ -50,16 +50,17 @@ func (h *azureAuthenticator) CreateToken(body []byte) (string, error) {
5050
return AzureAuthenticationTokenPrefix + token, nil
5151
}
5252

53-
type instanceMetadata struct {
53+
// InstanceMetadata contains compute instance metadata from the Azure IMDS.
54+
type InstanceMetadata struct {
5455
SubscriptionID string `json:"subscriptionId"`
5556
ResourceGroupName string `json:"resourceGroupName"`
5657
ResourceID string `json:"resourceId"`
5758
VMID string `json:"vmId"`
5859
}
5960

60-
// queryComputeInstanceMetadata queries Azure Instance Metadata Service (IMDS)
61+
// QueryComputeInstanceMetadata queries Azure Instance Metadata Service (IMDS)
6162
// https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service
62-
func queryComputeInstanceMetadata() (*instanceMetadata, error) {
63+
func QueryComputeInstanceMetadata() (*InstanceMetadata, error) {
6364
transport := &http.Transport{Proxy: nil}
6465

6566
client := http.Client{Transport: transport}
@@ -85,7 +86,7 @@ func queryComputeInstanceMetadata() (*instanceMetadata, error) {
8586
if err != nil {
8687
return nil, fmt.Errorf("reading a response from the metadata server: %w", err)
8788
}
88-
metadata := &instanceMetadata{}
89+
metadata := &InstanceMetadata{}
8990
err = json.Unmarshal(body, metadata)
9091
if err != nil {
9192
return nil, fmt.Errorf("unmarshalling instance metadata: %w", err)

upup/pkg/fi/cloudup/azure/verifier.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ type client struct {
193193

194194
// newClient returns a new Client.
195195
func newClient() (*client, error) {
196-
metadata, err := queryComputeInstanceMetadata()
196+
metadata, err := QueryComputeInstanceMetadata()
197197
if err != nil || metadata == nil {
198198
return nil, fmt.Errorf("getting instance metadata: %w", err)
199199
}

0 commit comments

Comments
 (0)