Я нахожу всевозможные пошаговые инструкции о том, как добавлять сертификаты, которые будут использоваться в самих модулях, но я не могу найти информацию о том, как настроить Kubernetes, чтобы разрешить самозаверяющий сертификат для извлечения изображений из экземпляра Harbour, работающего внутри кластер. У меня есть сертификат CA, импортированный в доверенные сертификаты системы (система работает под управлением Ubuntu 18.04), но я предполагаю, что Kubernetes где-то использует свое собственное хранилище доверенных сертификатов, подобно тому, как Java игнорирует доверенные сертификаты системы и полагается на файлы хранилища ключей?
редактировать Чтобы быть более конкретным, я пытаюсь развернуть собственный образ Docker, хранящийся в моем экземпляре Harbour, который работает в моем кластере Kubernetes. У меня есть сертификаты для Harbour, импортированные в ОС моей хост-системы, и я могу запустить:
docker login <url_to_harbor>
docker pull <url_to_harbor>/library/custom/image:latest
и он отлично работает из CLI, но если я попытаюсь создать yaml развертывания следующим образом:
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-deployment
spec:
replicas: 1
selector:
matchLabels:
app: custom
template:
metadata:
labels:
app: custom
spec:
containers:
- name: custom
image: <url_to_harbor>/library/custom/image:latest
...
и беги kubectl apply -f custom-deploy.yaml
Когда я получаю капсулы, я получаю следующую ошибку:
custom-deployment-6ff68947f6-8jj2p 0/1 ImagePullBackOff 0 13s
И если я получаю описание отказавшего модуля, я вижу:
Warning Failed 18s kubelet, node3 Failed to pull image "<url_to_harbor>/library/custom/image:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://<url_to_harbor>/v2/: x509: certificate signed by unknown authority
Warning Failed 18s kubelet, node3 Error: ErrImagePull
Я перезапустил хост-машину, так как импортировал сертификаты CA. Я добавил сертификаты, переместив файл сертификата корневого центра сертификации в /usr/local/share/ca-certificates
а затем бег sudo update-ca-certificates
.
Метод импорта сертификата CA правильный, но вы должны делать это на каждом узле кластера: на всех мастерах и рабочих. Kubernetes просто полагается на центры сертификации, установленные в базовой операционной системе.