Kubernetes - доступ к кластеру для внешнего доступа с помощью прокси-сервера cloudflare - PullRequest
0 голосов
/ 17 марта 2020

У меня сейчас есть следующие настройки:

  • Cloudflare https проксирует днс, который направляет ВСЕ трафики c на мой сервер (сквозной [клиент-> прокси и прокси-> сервер] шифрование с помощью CloudFlare Origin CA)
  • Nginx обратный прокси-сервер, который действует как SSL-завершение для всех траффиков c на мой сервер (сертификат, подписанный источником, я считаю)
  • Nginx прокси все, что идет к kube.my-domain.com на мой сервер kubeapi следующим образом: proxy_pass https://127.0.0.1:6443
  • kubeapi, запущенный на моем сервере

В настоящее время я могу подключиться к своему кластеру очень хорошо указав в моем kubeconfig:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://127.0.0.1:6443  <-----------------------------
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: test-namespace
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED

Но если я изменю сервер в kubeconfig, чтобы он указывал на мой домен: server: https://kube.my-domain.com Я получаю следующую ошибку:

user@master:~$ kubectl get deployments
Unable to connect to the server: x509: certificate signed by unknown authority

Теперь я предполагаю это потому, что мой трафик c должен go через прокси Cloudflare и имеет различные сертификаты на этом пути. Поэтому я пытаюсь добавить --insecure-skip-tls-verify = true и получить следующий ответ:

user@master:~$ kubectl get deployments --insecure-skip-tls-verify=true
error: the server doesn't have a resource type "deployments"

Так что я просматриваю это и выясняю, сколько времени это связано с RBA C (хотя я должен проходить аутентификацию как kubernetes-admin, который работал, когда я подключался локально ...)

I0317 00:41:09.281404   31989 loader.go:375] Config loaded from file:  /home/user/.kube/config
I0317 00:41:09.281813   31989 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.17.3 (linux/amd64) kubernetes/06ad960" 'https://kube.my-domain.com/api?timeout=32s'
I0317 00:41:09.493885   31989 round_trippers.go:443] GET https://kube.my-domain.com/api?timeout=32s 403 Forbidden in 212 milliseconds
I0317 00:41:09.493921   31989 round_trippers.go:449] Response Headers:
I0317 00:41:09.493970   31989 round_trippers.go:452]     Set-Cookie: REDACTED; expires=Thu, 16-Apr-20 04:41:09 GMT; path=/; domain=.my-domain.com; HttpOnly; SameSite=Lax; Secure
I0317 00:41:09.493991   31989 round_trippers.go:452]     Expect-Ct: max-age=604800, report-uri="REDACTED"
I0317 00:41:09.494002   31989 round_trippers.go:452]     Server: cloudflare
I0317 00:41:09.494027   31989 round_trippers.go:452]     Cf-Ray: REDACTED
I0317 00:41:09.494065   31989 round_trippers.go:452]     Date: Tue, 17 Mar 2020 04:41:09 GMT
I0317 00:41:09.494070   31989 round_trippers.go:452]     X-Content-Type-Options: nosniff
I0317 00:41:09.494091   31989 round_trippers.go:452]     Cf-Cache-Status: DYNAMIC
I0317 00:41:09.494112   31989 round_trippers.go:452]     Content-Type: application/json
I0317 00:41:09.498893   31989 request.go:1017] Response Body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"forbidden: User \"system:anonymous\" cannot get path \"/api\"","reason":"Forbidden","details":{},"code":403}
I0317 00:41:09.503266   31989 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.17.3 (linux/amd64) kubernetes/06ad960" 'https://kube.my-domain.com/apis?timeout=32s'
I0317 00:41:09.640948   31989 round_trippers.go:443] GET https://kube.my-domain.com/apis?timeout=32s 403 Forbidden in 137 milliseconds
I0317 00:41:09.640992   31989 round_trippers.go:449] Response Headers:
I0317 00:41:09.641000   31989 round_trippers.go:452]     Date: Tue, 17 Mar 2020 04:41:09 GMT
I0317 00:41:09.641006   31989 round_trippers.go:452]     Content-Type: application/json
I0317 00:41:09.641011   31989 round_trippers.go:452]     Cf-Cache-Status: DYNAMIC
I0317 00:41:09.641016   31989 round_trippers.go:452]     Expect-Ct: max-age=604800, report-uri="REDACTED"
I0317 00:41:09.641021   31989 round_trippers.go:452]     Set-Cookie: REDACTED; expires=Thu, 16-Apr-20 04:41:09 GMT; path=/; domain=.my-domain.com; HttpOnly; SameSite=Lax; Secure
I0317 00:41:09.641027   31989 round_trippers.go:452]     X-Content-Type-Options: nosniff
I0317 00:41:09.641031   31989 round_trippers.go:452]     Server: cloudflare
I0317 00:41:09.641056   31989 round_trippers.go:452]     Cf-Ray: REDACTED

Что я делаю не так? Кроме того, каков наилучший способ выставить мой кластер и сохранить его в безопасности?

Мне кажется, это связано с завершением SSL на NGINX удалением того, что необходимо для того, чтобы api-сервер узнал меня.

Спасибо.

ОБНОВЛЕНИЕ: Похоже, что либо прокси-сервер cloudflare pr NGINX удаляет сертификат и ключ аутентификации и поэтому вызывает запрос пользователя на анонимность. Все еще изучаю это.

1 Ответ

2 голосов
/ 17 марта 2020

Невозможно подключиться к серверу: x509: сертификат подписан неизвестным органом

Выше ошибка указывает, что сертификат сервера, представленный конечной точкой https://kube.my-domain.com, не является подписано центром сертификации, имеющимся в разделе certificate-authority-data файла kubeconfig. В kubeconfig вам нужно настроить правильный центр сертификации (CA).

...