Skip to content

Commit fd15b25

Browse files
ricardomaraschiniSaschaSchwarze0
authored andcommitted
Allowing per namespace mirror configuration
This PR allows users to set up different mirror registries in a per namespace basis.
1 parent fa184bc commit fd15b25

18 files changed

+311
-146
lines changed

README.md

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,14 @@ As for `.status.importAttempts` the following is valid:
223223

224224
If mirroring is set in an Image Shipwright Images will mirror the image content into another
225225
registry provided by the user. To mirror images locally one needs to inform Shipwright Images
226-
about the mirror registry location. There are two ways of doing so, the first one is by following
227-
a Kubernetes enhancement proposal laid down [here](https://bit.ly/3rxCRqH). This enhancement
228-
proposal still does not cover things such as authentication thus should not be used in production.
229-
Shipwright Images can also be informed of the mirror registry location through a Secret called
230-
`mirror-registry-config`, this secret may contain the following properties:
226+
about the mirror registry location. There are two ways of doing so, the first one is by setting
227+
a global mirror registry (to be used by all namespaces) and the second is to define a local mirror
228+
registry in a per namespace basis. Local mirror configuration takes precedence over global mirror
229+
configurations.
230+
231+
To configure a global mirror registry you have to create a Secret called `mirror-registry-config`
232+
inside the namespace where the operator is running. This secret may contain the following
233+
properties:
231234

232235
| Name | Description |
233236
| -----------| -------------------------------------------------------------------------------------------- |
@@ -236,18 +239,20 @@ Shipwright Images can also be informed of the mirror registry location through a
236239
| password | The password to be used by Shipwright Images |
237240
| token | The auth token to be used by Shipwright Images (optional) |
238241
| insecure | Allows Shipwright Images to access insecure registry if set to "true" (string) |
239-
| repository | If set Shipwright Images will mirror all images inside the same Registry repository |
242+
| repository | If set Shipwright Images will mirror all images inside this Registry repository (optional) |
240243

241-
Important to notice that, by default, Shipwright Images will create one repository per namespace
242-
so the user has to have enough permissiosn to do such an operator (create new repositories and
243-
push images to them). In other words: by default images are mirrored at
244-
`mirror.registry.io/namespace/imagename` inside the registry.
244+
If you prefer you can also create a secret with the same name (`mirror-registry-config`) in a
245+
given namespace. All image imports taking place in that namespace will then be mirrored in the
246+
defined registry. If neither local nor global mirror config is present the mirror process will
247+
fail.
245248

246-
If your user doesn't have such permissions you can set up the `repository` property in the config,
247-
by doing so all images are going to be mirrored inside the provided `repository`, in other words
248-
images will be mirrored at `mirror.registry.io/repository/namespace-imagename`.
249+
The property `repository` may be set if all images should be mirrored inside the same repository
250+
in the registry. Be aware that if you set the `repository` config for the global mirror config
251+
then all images in the cluster will be mirrored inside the same repository possibly leading to
252+
naming collisions as multiples Images with the same name can exist in different namespaces. If
253+
`repository` is not present Shipwright Images will use the `namespace` as registry's `repository`.
249254

250-
Follow below an example of a `mirror-registry-config` Secret:
255+
Follow below an example of a global `mirror-registry-config` Secret:
251256

252257
```yaml
253258
apiVersion: v1
@@ -261,6 +266,26 @@ data:
261266
password: d2hhdCB3ZXJlIHlvdSB0aGlua2luZz8K
262267
```
263268

269+
This sets up a global mirror registry, all images import requests will result in images being
270+
mirrored inside the same registry, they will be indexed by `namespace` as no `repository` has
271+
been set. Another example would be:
272+
273+
```yaml
274+
apiVersion: v1
275+
kind: Secret
276+
metadata:
277+
name: mirror-registry-config
278+
namespace: mynamespace
279+
data:
280+
address: bXktbG9jYWwtcmVnaXN0cnkuaW8=
281+
username: YWRtaW4=
282+
password: d2hhdCB3ZXJlIHlvdSB0aGlua2luZz8K
283+
```
284+
285+
The difference here is that this Secret lives in a different namespace therefore it is only used
286+
for mirror operations happening on that namespace (`mynamespace` on this case). Again, if no
287+
`repository` has been provided the `namespace` is used as the registry repository.
288+
264289
#### Importing images from private registries
265290

266291
Shipwright Images supports importing images from private registries, for that to work one needs to

e2e/import-failed/00-assert.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ spec:
66
source: a.b.c.d/test/123:latest
77
mirror: false
88
status:
9-
importAttempts:
10-
- succeed: false
9+
conditions:
10+
- type: Imported
11+
status: "False"
12+
reason: Progressing
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: mirror-registry
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: mirror-registry
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: certs
5+
namespace: mirror-registry
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: certs
5+
namespace: mirror-registry
6+
data:
7+
domain.key: |-
8+
LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQURBTkJna3Foa2lHOXcwQkFRRUZB
9+
QVNDQ1Mwd2dna3BBZ0VBQW9JQ0FRQ1pYeEhGV1RReUtGOHcKV1VBTEk1M2k2SDZiL1UxR0JqZmIw
10+
a0EzOXhtSXNNT1NON2JrbWUrQk5XK1VuQlIzWEE2dmtZSjQwY0FKaFZpRAowS1BpSm56VlMyckRi
11+
MmZrL1lTV2Z0UHlTdnMwaC9ETlRqQkZnalVUUFhjZHdWb2w0alZ6anFZUXdGdkFvOTlGCmlTU0Fk
12+
R0JKTlNKaU5ORy9xOFdIbFpWaDM2d3RqQzdDTHhzdTFLeGhHS3JlcjRueTZZZUltRmxOM1pQQnF6
13+
SjIKZXVwb2tMZUdrRmtUVkI5cmRyR3l3TVowa0R3WkdTOGc2TzVmbDNhS3N4NjlHWjRlNmEramVB
14+
YVc5RWJkRkR1UwovN01zSzEyTi91K0xxTUQrb3pyOVRvZ251aHJxRVFzdFg4MHp3aVNPamdQeW5y
15+
eUlDbUFqTHRZK20zYkE0d2sxCnp3QnJmRkNJZmUxTGpFT2c0VVE0NU5vQitDQkdDQmViZ2Q4clpN
16+
SDZ6eDlQekQ3aG41MDdRSFJSNVY2R1VxTGsKKzcvblR3WHh3RXUxMXFxSVZhM3o5djVHODM1cXQ5
17+
bzhlWExBVDJSS3IyQUdVTjVTVkJ1N0tMMTN5VTBJbnhYTApWVHNJVjZpUUhzK2dadW1BN21KZlBo
18+
dlUzakw2KzNoTmVCNHZOeUFVMkRHSFFlTmFSVzY0aVNINS9vNi82MGt4CnRRNDIrd1R2VmVDOXAy
19+
cjdVclhGUXBZOTk5S1Z1N2ZTdU95ZVlPWGVVdXd6ZVR3bEVqem9XYisxRTQzeERBdisKNDZDekxD
20+
QzkwLzhkbVJiSk1ka3hVV1JHSVFlYXVEQ3Byb2VVSVYwTURpWTVqRkp3cDlKalRhMnlJRWhZY0I2
21+
WApSbnUwT09aeTd0RnRuZWk5Q1R0RHBQcXBzdzV3bndJREFRQUJBb0lDQVFDTDduTjJUVWNVSkVX
22+
RkJVa3JZSm1pCjkyRGN6YVQ5S0pzNlVvQUpEOGdhTUx5ZTRYcGE1Qi9qRVcvMmROa3ZkYXhvZnln
23+
OU41SXduWnIrMlJOTk9MUlkKbnZDUDAwdEZZQkRpaG1DMkJiZGdYRTlWNGVxazRJR3dSam94eWNH
24+
SUl2V0ZzemJNdmRSNDFJclhGS05iRjlMcAp1RExneXpRNzNtcmdvNWVocnNPVzR2bWViZ0F0SUJr
25+
T2xjVUFXOFJPL3NhTDJBUlN5TUVReURQSWFha0pNbEJmCjA3K1JwUVR0dFdPM3BhN3JsdFZlU04z
26+
NDlzeldKb2tmVHdIU29sYmorVzRvaFUvdDFuMzVJNGFmUGZDcGNmOXYKbUpQU0ptdS9hQXBnSnBD
27+
UFBudGo1NXo5RHhWWURkL3d1SjNkZFBxcVhGME9mS000aC9zM1RXMlB6SWVqaWM2bQo4RFR5MFlr
28+
L2lYai9pMm16end2eW0wRnpmK1U4VWYwWlVLWVpkVUlWcXF5TlRtOXNFdHRPRXNIczU5a0VGcHlE
29+
Ck9MdEQyeTRSK0p1WXBtMEdWQkdUZlJ1KzczQTErb2Z1YW9hVDB3b0ZCUVkzYVR1TUxhVWVjNkRl
30+
M05pQTcrNSsKWEp0QTdHV3pHYkRXbnoyc2dkeTFFYm1Lb2JaTnZleXUwT1o4MlluQUdWL2FPb0wy
31+
OW1jMmovWXRiWVh0eWxlSQo5MFhMY1RlYmZveHhZa2VybFhMWWJSQ2NEa0RWOGlaSy9YRGU1VFpG
32+
T1prSk1Rek95L05ZNFVvN3FRaUtYRGc2Ckc5amJxYzE0L3RZRHNGRWIvWlo2Wi9BdUg5eEVFYzdu
33+
b0dHM09XWFNkUGVERGFIZmVwWThBNnlCNkZVeWdXOXkKUkF2b1dkSVlDaVVLVk4xRFNxSWk4UUtD
34+
QVFFQXlFMTRwL0E1UUNKSzJXTzh3R2tsTU9NeDdnbTRFV001WkNRMQptSGYya2E5a05vMTdSbG9W
35+
dXZSWHZXcEJ0R3NzL2xNOGRWUGk0RHVWNkRWS2pRRmw1VXBpeldmTUd5Szg2aEdDCjVwV2lFTGxt
36+
alZJd2JZeTVkZk9oK3paNG1RUTBacE1DVXBrRUJUY2JMbGNBU1VaMDVYMzBqSm9qaDJjN2wwSDkK
37+
cGZieEtuRDlYdkU5TFFpOGE2YWdIbGFET3lXa0VGK2huTjZEYjNjWjQyZnlTRVdtNlFRUFNhS254
38+
WFQ3dllpMQpOZ1pPVWFjOUFEcmJ2Y2hQdXNtdTFuTDltTVlsajR0YWQyYUVOOE1tV3B0SldZMkgx
39+
OWVDWGV1YjJvMXIvZmptCmd3aXM1ZE1iUHVrSmxPT0N0VitiU1dJRW1PNVhtNEp6bG9FNlB0SENl
40+
emoyc0VGK1RRS0NBUUVBeEFUTXVZTUkKNFRTR0ZUZlo5U2lFZUxCbHhSVmUwQXZHN3ZHU1VyREEv
41+
Yk9sMHczbVBRY3hhcGxjUkFEZ1NUSXpndVU3TGJzdgpXOUlCKzR2STdOSW13eUtaSTJLZkpiZUpI
42+
b1I5eGlNVXJJVkY3S1FhZ3FFSGRqTndZNmRTcGRJenJ5ZERtVFNSCko5MlhqRUxibG9sOTVlVkRy
43+
ZFdkMTd2Z2JsYVpnb3l1UjJmL0RxRmg3N0tqZERXTTlTUS9DLzl4QldpMkZKYWEKZ1pIcXBiVWlN
44+
Y3ZneWdQaFRuQS9GaVRWcDZ1eFZzRUlaQmp6STZhYW1lbmhsaWlZUVcxdmk5dm1NazI2aWxRdQpz
45+
Z0pmT25xSXkwU2ticld3MVFudXg3eGxVVDFRQ3duOWRXdTZkOC9UOXRLNTlmOTJwNTlXajZwNmNV
46+
S2NRbldvCk9kV1hBYzMrb3k3WW13S0NBUUVBbFRqaUFucjhxOExnY0VQVmdxTFNpakU0S1ZZa1F3
47+
L2cyYklBRzY2RGl0VlgKbXl5Y0FqVnFxdlVOeUpjNGkraXNoR3dPUm5wUU15MHc2T1dLdkxHbDc4
48+
UVRCMk9rc3pLVit1dEEwZmYzM08zQwpjTllpTGZzQXo5YkpmaFYra3NDSEtVT3NIMHpQcWZMNzFQ
49+
SUx6SXNvMnkrUzJJeWNtMnRWQWNLdjdNeWpyakt2CkQrUTQ1eXZ5ODJBWE9ZTEtFVzVoWTdGYS9U
50+
cm9RRXBDaHlBUlo3WThPcXhEbDJBT0RSU3gxdW5aMW4yc0t6aWsKUVYrWUJUTU44dUg5MXRXa0NB
51+
VFdSckpTbTFGTWZ4NXJuR1REcUd2QUlCVDFrbkxNa1cxNlhxTG5XQWRHaDVGVwpZdS9KcTVveTds
52+
eGptNi9pTE95alo3OHZ6WmhJaERSUTV1dnhIQzR1b1FLQ0FRQkpJMVZUM3EyQWdmMkppelpiCkFB
53+
dzFqL1BaRG5rNi9Ubnp5OVVCMzR1UzNlWUFrczRXZFVtZDhhejRmcTh4QUhjeDN1QXUxd243bzZj
54+
enVWdDEKNlkrbS9aRFFJQ3NyZ29pNkIwdDZrM3BTU01QbllPKzNUK2dkMVdHWS9VU2NOSXN1VG1N
55+
dGxleVhTRm9VYnBuSwpXSERPUjdYeDlhT1liRFI0VnYyZU5XbU5vU01NelhCaVpIQVNteXlHQjBr
56+
eTY5TzY1ZkFTVElOSDF5OExOME9UCit2TmJ6UWpUSUpTWmFaTUNwZEJjZzFmaktXQUhMRkhCSGdB
57+
YTYvaXJhTzdXNjJ5LzFqckZCRllMKzFDVzNFT1EKUElOeC8zOEVibGxXMDFlbWNVOGRYMVBmN1Jz
58+
OU95Rm1sZ2ZtM3JQaUpWVEI5Q1VOZjRJWVZoZzN4QmM5Q0NSNwp0SzREQW9JQkFDdy92SmFHZDNT
59+
UlNhMWsyUXJhY0pJTDNVeU1WcTBtZmhiUXNJWGs4OThMcjdpTDJQTTRmV2lUCkErU2tJM055YWJS
60+
b3FCQk05SUJNNmxzZGpWdWR0bkZHQk9FMUd2bHloQUxQaGZYMGUrV1BNd1ROeFljVnFnZ08KSTcx
61+
dnk4L2tBaHY4aE9wcWVsazVXb1JvRnBxa1dnNG9GWFN5QndLb1lmaUdDK0JYVUR2dFhRbVZvU3RO
62+
WGZybgorWkM0TXZPbExUejlnN1c4SUlHdUJvTDN2NWNybThOeUFuUzFRQWE4dUl4YXhlRlgxRldl
63+
cytWbUgrQzdNaWtNClpCUmR4R2RZdm0yRTdSUkQvTXFUOUFpQnVGSWMrVUxCVlEyWUg3NTkveisv
64+
VHFPVEY4b29HNzBtZ0NOa2dTdVMKa2FGbGNkTDhzRTVQMmhDaUdQUzdITUg4UWF4TE83WT0KLS0t
65+
LS1FTkQgUFJJVkFURSBLRVktLS0tLQo=
66+
domain.crt: |-
67+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZaVENDQTAyZ0F3SUJBZ0lVWHVvcWRiaWNQ
68+
Sk5Ld1lxSWdqTFVmWU4vMGlvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1FqRUxNQWtHQTFVRUJoTUNX
69+
Rmd4RlRBVEJnTlZCQWNNREVSbFptRjFiSFFnUTJsMGVURWNNQm9HQTFVRQpDZ3dUUkdWbVlYVnNk
70+
Q0JEYjIxd1lXNTVJRXgwWkRBZUZ3MHlNVEE1TWpNeE9EVXpNakZhRncweU1qQTVNak14Ck9EVXpN
71+
akZhTUVJeEN6QUpCZ05WQkFZVEFsaFlNUlV3RXdZRFZRUUhEQXhFWldaaGRXeDBJRU5wZEhreEhE
72+
QWEKQmdOVkJBb01FMFJsWm1GMWJIUWdRMjl0Y0dGdWVTQk1kR1F3Z2dJaU1BMEdDU3FHU0liM0RR
73+
RUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUUNaWHhIRldUUXlLRjh3V1VBTEk1M2k2SDZiL1UxR0Jq
74+
ZmIwa0EzOXhtSXNNT1NON2JrCm1lK0JOVytVbkJSM1hBNnZrWUo0MGNBSmhWaUQwS1BpSm56VlMy
75+
ckRiMmZrL1lTV2Z0UHlTdnMwaC9ETlRqQkYKZ2pVVFBYY2R3Vm9sNGpWempxWVF3RnZBbzk5RmlT
76+
U0FkR0JKTlNKaU5ORy9xOFdIbFpWaDM2d3RqQzdDTHhzdQoxS3hoR0tyZXI0bnk2WWVJbUZsTjNa
77+
UEJxekoyZXVwb2tMZUdrRmtUVkI5cmRyR3l3TVowa0R3WkdTOGc2TzVmCmwzYUtzeDY5R1o0ZTZh
78+
K2plQWFXOUViZEZEdVMvN01zSzEyTi91K0xxTUQrb3pyOVRvZ251aHJxRVFzdFg4MHoKd2lTT2pn
79+
UHlucnlJQ21Bakx0WSttM2JBNHdrMXp3QnJmRkNJZmUxTGpFT2c0VVE0NU5vQitDQkdDQmViZ2Q4
80+
cgpaTUg2eng5UHpEN2huNTA3UUhSUjVWNkdVcUxrKzcvblR3WHh3RXUxMXFxSVZhM3o5djVHODM1
81+
cXQ5bzhlWExBClQyUktyMkFHVU41U1ZCdTdLTDEzeVUwSW54WExWVHNJVjZpUUhzK2dadW1BN21K
82+
ZlBodlUzakw2KzNoTmVCNHYKTnlBVTJER0hRZU5hUlc2NGlTSDUvbzYvNjBreHRRNDIrd1R2VmVD
83+
OXAycjdVclhGUXBZOTk5S1Z1N2ZTdU95ZQpZT1hlVXV3emVUd2xFanpvV2IrMUU0M3hEQXYrNDZD
84+
ekxDQzkwLzhkbVJiSk1ka3hVV1JHSVFlYXVEQ3Byb2VVCklWME1EaVk1akZKd3A5SmpUYTJ5SUVo
85+
WWNCNlhSbnUwT09aeTd0RnRuZWk5Q1R0RHBQcXBzdzV3bndJREFRQUIKbzFNd1VUQWRCZ05WSFE0
86+
RUZnUVVFNXhBdGpWTkR6YnlKZXhJYmRsbEh0MGtZSjR3SHdZRFZSMGpCQmd3Rm9BVQpFNXhBdGpW
87+
TkR6YnlKZXhJYmRsbEh0MGtZSjR3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFOQmdrcWhraUc5dzBC
88+
CkFRc0ZBQU9DQWdFQVV6ckpkRkswc3FuTHI1Ull2ZU9WbUxobGV2Z1M3K2NnOGV3b3lqRUFaU0R0
89+
cUFCNlRxYUIKWlVnR3dndmx4Z2xHSHc5Z0Fvc1NTZE9kQlJjRzdXN3FDQllySmNhcFNrbys0d2Qz
90+
NkI3ZHdMRlhWQjFPV3FhMwpaRGU2UkNNdFdTWjFxMlN6VklKZGtFWEdSTzRTV1p5SnptL2Z5eGRJ
91+
UndXUk80ZlhPNXBPOU80K29JdC8wSzhMCm5BcDliSzdBRFI5ZzlDakkxYjhzck5KMHFJc2hxd3pw
92+
UWQyY2lqZ21xRHNzQUZhS00xTjI5M1F3OFZPSVNxL0wKY1ZnV3ZwazYrSmw2dGgyNGI5Sk56T0kw
93+
RVdCeDhwUzNhbzJaWEFnRnpjd3o0djZzaVJITnhNTUorL2p1SEEwQQpyVCtucWU5cTVXWlA3MnBk
94+
dlNCNytFL01ZeWRhQUtpWGJjM2hEMFUvS0g3WnozY2dDSVQvZnpnUS9tUHBUbzNjCmtyZHNSdUVN
95+
WUtNUlhrY3lnL2lGK2hXcFN2Q0wvSnEvWTRMZGpDcWZCb3J4NUxHc3pFYy8wN1lBWXpramZiRkgK
96+
cmo1d2xEa0Jzc3JqS2padERqVDBvM3lQaHFQMWVyWFNXZ2pCZG5qK1M0QW44VW5yNlpQY1BYa24x
97+
NkU0eHFlUQpScVVaSnBPb1pNTjgrM1dKc0N1RnBXcnA0OGErZnJoMGhBK1Uxem5GN201V1gxQVpy
98+
Z3ZHWXpVRUljdHM2NzVlCkZ3a09aWVlDeHZCdkJ4dDIrZDUvUG9jRDRTQ09ncWVvY09qMlJUS3pN
99+
cXJpVER0REk2Z2dkdXBsc1RuOEc3ZmkKdzZXTVBNQUoxeWRJZ2RTU1Z1OVBKWHhrWkFPdm1lcnNo
100+
NlVGOW15ZjQ3Y0ZpbzU4N3pLMWZJZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
namespace: mirror-registry
5+
labels:
6+
app: registry
7+
spec:
8+
containers:
9+
- name: registry
10+
status:
11+
phase: Running
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: registry
5+
namespace: mirror-registry
6+
labels:
7+
app: registry
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: registry
13+
template:
14+
metadata:
15+
labels:
16+
app: registry
17+
spec:
18+
volumes:
19+
- name: certs
20+
secret:
21+
secretName: certs
22+
containers:
23+
- name: registry
24+
image: docker.io/library/registry:2
25+
volumeMounts:
26+
- mountPath: /certs
27+
name: certs
28+
env:
29+
- name: REGISTRY_HTTP_TLS_KEY
30+
value: /certs/domain.key
31+
- name: REGISTRY_HTTP_TLS_CERTIFICATE
32+
value: /certs/domain.crt
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: registry
5+
namespace: mirror-registry
6+
spec:
7+
selector:
8+
app: registry
9+
ports:
10+
- protocol: TCP
11+
port: 5000
12+
targetPort: 5000
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: registry
5+
namespace: mirror-registry
6+
spec:
7+
selector:
8+
app: registry
9+
ports:
10+
- protocol: TCP
11+
port: 5000
12+
targetPort: 5000

0 commit comments

Comments
 (0)