You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
3.1 KiB

  1. # Enable TLS for Kube-Registry
  2. This document describes how to enable TLS for kube-registry. Before you start, please check if you have all the prerequisite:
  3. - A domain for kube-registry. Assuming it is ` myregistrydomain.com`.
  4. - Domain certificate and key. Assuming they are `domain.crt` and `domain.key`
  5. ### Pack domain.crt and domain.key into a Secret
  6. ```console
  7. $ kubectl --namespace=kube-system create secret generic registry-tls-secret --from-file=domain.crt=domain.crt --from-file=domain.key=domain.key
  8. ```
  9. ### Run Registry
  10. Please be noted that this sample rc is using emptyDir as storage backend for simplicity.
  11. <!-- BEGIN MUNGE: EXAMPLE registry-tls-rc.yaml -->
  12. ```yaml
  13. apiVersion: v1
  14. kind: ReplicationController
  15. metadata:
  16. name: kube-registry-v0
  17. namespace: kube-system
  18. labels:
  19. k8s-app: kube-registry
  20. version: v0
  21. # kubernetes.io/cluster-service: "true"
  22. spec:
  23. replicas: 1
  24. selector:
  25. k8s-app: kube-registry
  26. version: v0
  27. template:
  28. metadata:
  29. labels:
  30. k8s-app: kube-registry
  31. version: v0
  32. # kubernetes.io/cluster-service: "true"
  33. spec:
  34. containers:
  35. - name: registry
  36. image: registry:2
  37. resources:
  38. # keep request = limit to keep this container in guaranteed class
  39. limits:
  40. cpu: 100m
  41. memory: 100Mi
  42. requests:
  43. cpu: 100m
  44. memory: 100Mi
  45. env:
  46. - name: REGISTRY_HTTP_ADDR
  47. value: :5000
  48. - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
  49. value: /var/lib/registry
  50. - name: REGISTRY_HTTP_TLS_CERTIFICATE
  51. value: /certs/domain.crt
  52. - name: REGISTRY_HTTP_TLS_KEY
  53. value: /certs/domain.key
  54. volumeMounts:
  55. - name: image-store
  56. mountPath: /var/lib/registry
  57. - name: cert-dir
  58. mountPath: /certs
  59. ports:
  60. - containerPort: 5000
  61. name: registry
  62. protocol: TCP
  63. volumes:
  64. - name: image-store
  65. emptyDir: {}
  66. - name: cert-dir
  67. secret:
  68. secretName: registry-tls-secret
  69. ```
  70. <!-- END MUNGE: EXAMPLE registry-tls-rc.yaml -->
  71. ### Expose External IP for Kube-Registry
  72. Modify the default kube-registry service to `LoadBalancer` type and point the DNS record of `myregistrydomain.com` to the service external ip.
  73. <!-- BEGIN MUNGE: EXAMPLE registry-tls-svc.yaml -->
  74. ```yaml
  75. apiVersion: v1
  76. kind: Service
  77. metadata:
  78. name: kube-registry
  79. namespace: kube-system
  80. labels:
  81. k8s-app: kube-registry
  82. # kubernetes.io/cluster-service: "true"
  83. kubernetes.io/name: "KubeRegistry"
  84. spec:
  85. selector:
  86. k8s-app: kube-registry
  87. type: LoadBalancer
  88. ports:
  89. - name: registry
  90. port: 5000
  91. protocol: TCP
  92. ```
  93. <!-- END MUNGE: EXAMPLE registry-tls-svc.yaml -->
  94. ### To Verify
  95. Now you should be able to access your kube-registry from another docker host.
  96. ```console
  97. docker pull busybox
  98. docker tag busybox myregistrydomain.com:5000/busybox
  99. docker push myregistrydomain.com:5000/busybox
  100. docker pull myregistrydomain.com:5000/busybox
  101. ```
  102. [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/cluster/addons/registry/tls/README.md?pixel)]()