@@ -11,7 +11,7 @@ public class KubernetesMetadata : ContainerProviderMetadata
11
11
/// <summary>
12
12
/// 容器注册表鉴权 Secret 名称
13
13
/// </summary>
14
- public string ? AuthSecretName { get ; set ; }
14
+ public RegistrySet < string > AuthSecretNames { get ; set ; } = new ( ) ;
15
15
16
16
/// <summary>
17
17
/// K8s 集群 Host IP
@@ -31,7 +31,7 @@ public class KubernetesProvider : IContainerProvider<Kubernetes, KubernetesMetad
31
31
readonly Kubernetes _kubernetesClient ;
32
32
readonly KubernetesMetadata _kubernetesMetadata ;
33
33
34
- public KubernetesProvider ( IOptions < RegistryConfig > registry , IOptions < ContainerProvider > options ,
34
+ public KubernetesProvider ( IOptions < RegistrySet < RegistryConfig > > registries , IOptions < ContainerProvider > options ,
35
35
ILogger < KubernetesProvider > logger )
36
36
{
37
37
_kubernetesMetadata = new ( )
@@ -63,21 +63,9 @@ public KubernetesProvider(IOptions<RegistryConfig> registry, IOptions<ContainerP
63
63
64
64
_kubernetesClient = new Kubernetes ( config ) ;
65
65
66
- var registryValue = registry . Value ;
67
- var withAuth = ! string . IsNullOrWhiteSpace ( registryValue . ServerAddress )
68
- && ! string . IsNullOrWhiteSpace ( registryValue . UserName )
69
- && ! string . IsNullOrWhiteSpace ( registryValue . Password ) ;
70
-
71
- if ( withAuth )
72
- {
73
- var padding =
74
- $ "{ registryValue . UserName } @{ registryValue . Password } @{ registryValue . ServerAddress } ". ToMD5String ( ) ;
75
- _kubernetesMetadata . AuthSecretName = $ "{ registryValue . UserName } -{ padding } ". ToValidRFC1123String ( "secret" ) ;
76
- }
77
-
78
66
try
79
67
{
80
- InitKubernetes ( withAuth , registryValue ) ;
68
+ InitKubernetes ( registries . Value ) ;
81
69
}
82
70
catch ( Exception e )
83
71
{
@@ -96,7 +84,7 @@ public KubernetesProvider(IOptions<RegistryConfig> registry, IOptions<ContainerP
96
84
97
85
public KubernetesMetadata GetMetadata ( ) => _kubernetesMetadata ;
98
86
99
- void InitKubernetes ( bool withAuth , RegistryConfig ? registry )
87
+ void InitKubernetes ( RegistrySet < RegistryConfig > registries )
100
88
{
101
89
if ( _kubernetesClient . CoreV1 . ListNamespace ( ) . Items
102
90
. All ( ns => ns . Metadata . Name != _kubernetesMetadata . Config . Namespace ) )
@@ -133,43 +121,46 @@ void InitKubernetes(bool withAuth, RegistryConfig? registry)
133
121
}
134
122
} , _kubernetesMetadata . Config . Namespace ) ;
135
123
136
- if ( ! withAuth || registry ? . ServerAddress is null )
137
- return ;
124
+ // create auth secrets for registries
125
+ foreach ( KeyValuePair < string , RegistryConfig > registry in registries . Where ( registry => registry . Value . Valid ) )
126
+ InsertRegistrySecret ( registry . Key , registry . Value ) ;
127
+ }
128
+
129
+ void InsertRegistrySecret ( string address , RegistryConfig registry )
130
+ {
131
+ var padding = $ "GZCTF@{ registry . UserName } @{ address } ". ToMD5String ( ) ;
132
+ var secretName = $ "{ registry . UserName } -{ padding } ". ToValidRFC1123String ( "secret" ) ;
138
133
139
134
var auth = Codec . Base64 . Encode ( $ "{ registry . UserName } :{ registry . Password } ") ;
140
135
var dockerJsonObj = new DockerRegistryOptions (
141
- new Dictionary < string , DockerRegistryEntry >
142
- {
143
- [ registry . ServerAddress ] = new ( auth , registry . UserName , registry . Password )
144
- }
136
+ new Dictionary < string , DockerRegistryEntry > { [ address ] = new ( auth , registry . UserName , registry . Password ) }
145
137
) ;
146
138
147
139
var dockerJsonBytes =
148
140
JsonSerializer . SerializeToUtf8Bytes ( dockerJsonObj , AppJsonSerializerContext . Default . DockerRegistryOptions ) ;
149
141
var secret = new V1Secret
150
142
{
151
143
Metadata =
152
- new V1ObjectMeta
153
- {
154
- Name = _kubernetesMetadata . AuthSecretName ,
155
- NamespaceProperty = _kubernetesMetadata . Config . Namespace
156
- } ,
144
+ new V1ObjectMeta { Name = secretName , NamespaceProperty = _kubernetesMetadata . Config . Namespace } ,
157
145
Data = new Dictionary < string , byte [ ] > { [ ".dockerconfigjson" ] = dockerJsonBytes } ,
158
146
Type = "kubernetes.io/dockerconfigjson"
159
147
} ;
160
148
161
149
try
162
150
{
163
- _kubernetesClient . CoreV1 . ReplaceNamespacedSecret ( secret , _kubernetesMetadata . AuthSecretName ,
151
+ _kubernetesClient . CoreV1 . ReplaceNamespacedSecret ( secret , secretName ,
164
152
_kubernetesMetadata . Config . Namespace ) ;
165
153
}
166
154
catch
167
155
{
168
156
_kubernetesClient . CoreV1 . CreateNamespacedSecret ( secret , _kubernetesMetadata . Config . Namespace ) ;
169
157
}
158
+
159
+ if ( ! _kubernetesMetadata . AuthSecretNames . TryAdd ( address , secretName ) )
160
+ _kubernetesMetadata . AuthSecretNames [ address ] = secretName ;
170
161
}
171
162
}
172
163
173
- internal record DockerRegistryOptions ( Dictionary < string , DockerRegistryEntry > auths ) ;
164
+ internal record DockerRegistryOptions ( Dictionary < string , DockerRegistryEntry > Auths ) ;
174
165
175
- internal record DockerRegistryEntry ( string auth , string ? username , string ? password ) ;
166
+ internal record DockerRegistryEntry ( string Auth , string ? Username , string ? Password ) ;
0 commit comments