Итак, я не совсем уверен, работает ли это как ответ, потому что пока он достигает всего, что мы хотели сделать; он не поддерживает завершение SSL для балансировщика нагрузки.
Итак, основной компромисс таков:
- Заставить GitLab обслуживать SSL-соединения с помощью встроенного контроллера nginx. Настройки NGINX для GitLab
- Настройка GitLab для пересылки HTTP -> HTTP, стандартные вещи. Документация охватывает большую часть этого.
- Когда вы позволяете LoadBalancer обрабатывать SSL, вам просто нужно указать на секрет, и он будет работать (это происходит в определенном формате с ключами
tls.crt
и tls.key
, оба в формате pem). Вы можете перенести одну и ту же структуру, смонтировав эти два ключа в файл и изменив настройки nginx (ssl_certificate
и ssl_certificate_key
):
В вашем разделе томов:
Объемы:
- название: гитлаб-церт
секрет:
secretName:
Предметы:
- ключ: tls.key
путь: git.mycompany.com.key
- ключ: tls.crt
путь: git.mycompany.com.crt
И смонтировать его в любом удобном для вас месте:
volumeMounts:
- название: гитлаб-керц
mountPath: / etc / gitlab / ssl /
В приведенном выше случае это сделает ваш gitlab.rb
похожим на:
nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.mycompany.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.mycompany.com.key"
В случае, если ваш домен, на котором вы размещаете, фактически git.mycompany.com
, вы можете пропустить этот шаг, потому что расположение, указанное выше, является тем, к которому оно по умолчанию относится.
И, наконец, вместо использования Ingress, просто представьте ваше развертывание:
apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: gitlab
spec:
type: LoadBalancer
loadBalancerIP: <your-static-ip>
ports:
- port: 80
name: http
targetPort: 80
protocol: TCP
- port: 443
name: https
targetPort: 443
protocol: TCP
- port: 22
name: ssh
targetPort: 22
protocol: TCP
selector:
app: gitlab
Статический ip для loadBalancerIP
- это то, что вам нужно получить из вашей консоли Google. Обратите внимание, что это не будет работать для глобального зарезервированного IP. Вы должны получить региональный IP в том же регионе, что и ваш кластер.
Я бы все же предпочел терминацию SSL, потому что так работают все остальные наши сервисы, и неоднородность меня немного раздражает: (