Skip to content

Commit f4b5c97

Browse files
author
OlivierB
authored
Merge pull request #6 from artemlive/feature/add-role-binding-for-secrets
Feature/add role binding for secrets reading
2 parents 994dd33 + 7f246b8 commit f4b5c97

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

charts/alidns-webhook/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ apiVersion: v1
22
appVersion: "1.0"
33
description: A Helm chart for Kubernetes
44
name: alidns-webhook
5-
version: 0.1.1
5+
version: 0.1.2

charts/alidns-webhook/templates/rbac.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,46 @@ metadata:
88
release: {{ .Release.Name }}
99
heritage: {{ .Release.Service }}
1010
---
11+
# Grant permissions to read secrets inside the cert-manager namespace to get credentials
12+
apiVersion: rbac.authorization.k8s.io/v1
13+
kind: Role
14+
metadata:
15+
name: {{ include "alidns-webhook.fullname" . }}:secrets-reader
16+
namespace: {{ .Release.Namespace }}
17+
labels:
18+
app: {{ include "alidns-webhook.name" . }}
19+
chart: {{ include "alidns-webhook.chart" . }}
20+
release: {{ .Release.Name }}
21+
heritage: {{ .Release.Service }}
22+
rules:
23+
- apiGroups:
24+
- ''
25+
resources:
26+
- 'secrets'
27+
verbs:
28+
- 'get'
29+
---
30+
# Bind the previously created role to the webhook service account to allow reading from secrets in a cert-manager namespace
31+
apiVersion: rbac.authorization.k8s.io/v1
32+
kind: RoleBinding
33+
metadata:
34+
name: {{ include "alidns-webhook.fullname" . }}:secrets-reader
35+
namespace: {{ .Release.Namespace }}
36+
labels:
37+
app: {{ include "alidns-webhook.name" . }}
38+
chart: {{ include "alidns-webhook.chart" . }}
39+
release: {{ .Release.Name }}
40+
heritage: {{ .Release.Service }}
41+
roleRef:
42+
apiGroup: rbac.authorization.k8s.io
43+
kind: Role
44+
name: {{ include "alidns-webhook.fullname" . }}:secrets-reader
45+
subjects:
46+
- apiGroup: ""
47+
kind: ServiceAccount
48+
name: {{ include "alidns-webhook.fullname" . }}
49+
namespace: {{ .Release.Namespace }}
50+
---
1151
# Grant the webhook permission to read the ConfigMap containing the Kubernetes
1252
# apiserver's requestheader-ca-certificate.
1353
# This ConfigMap is automatically created by the Kubernetes apiserver.

main.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@ package main
33
import (
44
"encoding/json"
55
"fmt"
6+
67
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
78
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
89
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
910
"github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
1011

11-
"github.com/pkg/errors"
1212
"os"
1313
"strings"
1414

15+
"github.com/pkg/errors"
16+
1517
extapi "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
1618
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1719
"k8s.io/client-go/kubernetes"
@@ -102,7 +104,7 @@ func (c *aliDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error {
102104
}
103105

104106
// TODO: do something more useful with the decoded configuration
105-
fmt.Printf("Decoded configuration %v", cfg)
107+
fmt.Printf("Decoded configuration: %v\n", cfg)
106108

107109
accessToken, err := c.loadSecretData(cfg.AccessToken, ch.ResourceNamespace)
108110
secretKey, err := c.loadSecretData(cfg.SecretToken, ch.ResourceNamespace)
@@ -118,14 +120,14 @@ func (c *aliDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error {
118120

119121
_, zoneName, err := c.getHostedZone(ch.ResolvedZone)
120122
if err != nil {
121-
return fmt.Errorf("alicloud: %v", err)
123+
return fmt.Errorf("alicloud: error getting hosted zones: %v", err)
122124
}
123125

124126
recordAttributes := c.newTxtRecord(zoneName, ch.ResolvedFQDN, ch.Key)
125127

126128
_, err = c.aliDNSClient.AddDomainRecord(recordAttributes)
127129
if err != nil {
128-
return fmt.Errorf("alicloud: API call failed: %v", err)
130+
return fmt.Errorf("alicloud: error adding domain record: %v", err)
129131
}
130132
return nil
131133
}
@@ -139,7 +141,7 @@ func (c *aliDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error {
139141
func (c *aliDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error {
140142
records, err := c.findTxtRecords(ch.ResolvedZone, ch.ResolvedFQDN)
141143
if err != nil {
142-
return fmt.Errorf("alicloud: %v", err)
144+
return fmt.Errorf("alicloud: error finding txt records: %v", err)
143145
}
144146

145147
_, _, err = c.getHostedZone(ch.ResolvedZone)
@@ -153,7 +155,7 @@ func (c *aliDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error {
153155
request.RecordId = rec.RecordId
154156
_, err = c.aliDNSClient.DeleteDomainRecord(request)
155157
if err != nil {
156-
return fmt.Errorf("alicloud: %v", err)
158+
return fmt.Errorf("alicloud: error deleting domain record: %v", err)
157159
}
158160
}
159161
}
@@ -206,7 +208,7 @@ func (c *aliDNSProviderSolver) getHostedZone(resolvedZone string) (string, strin
206208

207209
response, err := c.aliDNSClient.DescribeDomains(request)
208210
if err != nil {
209-
return "", "", fmt.Errorf("API call failed: %v", err)
211+
return "", "", fmt.Errorf("alicloud: error describing domains: %v", err)
210212
}
211213

212214
domains = append(domains, response.Domains.Domain...)
@@ -254,7 +256,7 @@ func (c *aliDNSProviderSolver) findTxtRecords(domain string, fqdn string) ([]ali
254256

255257
result, err := c.aliDNSClient.DescribeDomainRecords(request)
256258
if err != nil {
257-
return records, fmt.Errorf("API call has failed: %v", err)
259+
return records, fmt.Errorf("alicloud: error describing domain records: %v", err)
258260
}
259261

260262
recordName := c.extractRecordName(fqdn, zoneName)

0 commit comments

Comments
 (0)