Skip to content

Commit ca07b62

Browse files
Robert Marshallbalasankarc
andcommitted
Merge branch '8131-kas-redis-tls' into 'master'
Add Redis TLS settings for KAS Closes #8131 See merge request https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/7180 Merged-by: Robert Marshall <[email protected]> Approved-by: Clemens Beck <[email protected]> Approved-by: Robert Marshall <[email protected]> Reviewed-by: Clemens Beck <[email protected]> Co-authored-by: Balasankar "Balu" C <[email protected]>
2 parents 776bbab + b27aa99 commit ca07b62

File tree

7 files changed

+279
-168
lines changed

7 files changed

+279
-168
lines changed

files/gitlab-config-template/gitlab.rb.template

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2109,6 +2109,21 @@ external_url 'GENERATED_EXTERNAL_URL'
21092109
# gitlab_kas['log_group'] = nil
21102110
# gitlab_kas['env_directory'] = '/opt/gitlab/etc/gitlab-kas/env'
21112111

2112+
##! Redis settings for GitLab KAS
2113+
# gitlab_kas['redis_socket'] = ''
2114+
# gitlab_kas['redis_host'] = '127.0.0.1'
2115+
# gitlab_kas['redis_port'] = '6379'
2116+
# gitlab_kas['redis_password'] = nil
2117+
2118+
# gitlab_kas['redis_sentinels'] = {}
2119+
# gitlab_kas['redis_sentinels_master_name'] = nil
2120+
# gitlab_kas['redis_sentinels_password'] = ''
2121+
2122+
# gitlab_kas['redis_ssl'] = false
2123+
# gitlab_kas['redis_tls_ca_cert_file'] = '/opt/gitlab/embedded/ssl/certs/cacert.pem'
2124+
# gitlab_kas['redis_tls_client_cert_file'] = nil
2125+
# gitlab_kas['redis_tls_client_key_file'] = nil
2126+
21122127
################################################################################
21132128
## GitLab Suggested Reviewers (EE Only)
21142129
##! Docs: https://docs.gitlab.com/ee/user/project/merge_requests/reviews/#suggested-reviewers

files/gitlab-cookbooks/gitlab-kas/attributes/default.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,18 @@
4343
}
4444

4545
default['gitlab-kas'] = Gitlab::Deprecations::NodeAttribute.new(proc { node['gitlab_kas'].to_h }, "node['gitlab-kas']", "node['gitlab_kas']")
46+
47+
# Defaults of the following settings are computed from `gitlab_rails`, and are
48+
# set in the library. If a new key is added here that needs to be computed from
49+
# the Rails counterpart, make sure it is added to the list in the library too
50+
default['gitlab_kas']['redis_socket'] = nil
51+
default['gitlab_kas']['redis_host'] = nil
52+
default['gitlab_kas']['redis_port'] = nil
53+
default['gitlab_kas']['redis_password'] = nil
54+
default['gitlab_kas']['redis_sentinels'] = nil
55+
default['gitlab_kas']['redis_sentinels_master_name'] = nil
56+
default['gitlab_kas']['redis_sentinels_password'] = nil
57+
default['gitlab_kas']['redis_ssl'] = nil
58+
default['gitlab_kas']['redis_tls_ca_cert_file'] = nil
59+
default['gitlab_kas']['redis_tls_client_cert_file'] = nil
60+
default['gitlab_kas']['redis_tls_client_key_file'] = nil

files/gitlab-cookbooks/gitlab-kas/libraries/gitlab_kas.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def parse_variables
2525
parse_gitlab_kas_enabled
2626
parse_gitlab_kas_external_url
2727
parse_gitlab_kas_internal_url
28+
parse_redis_settings
2829
end
2930

3031
def parse_address
@@ -105,6 +106,26 @@ def validate_secrets
105106
raise "gitlab_kas['private_api_secret_key'] should be exactly 32 bytes" if private_api_secret_key.length != 32
106107
end
107108

109+
def parse_redis_settings
110+
settings_copied_from_gitlab_rails = %w[
111+
redis_socket
112+
redis_host
113+
redis_port
114+
redis_password
115+
redis_sentinels
116+
redis_sentinels_password
117+
redis_ssl
118+
redis_tls_ca_cert_file
119+
redis_tls_client_cert_file
120+
redis_tls_client_key_file
121+
]
122+
settings_copied_from_gitlab_rails.each do |setting|
123+
Gitlab['gitlab_kas'][setting] = Gitlab['gitlab_rails'][setting] || Gitlab['node']['gitlab']['gitlab_rails'][setting] unless Gitlab['gitlab_kas'].key?(setting)
124+
end
125+
126+
Gitlab['gitlab_kas']['redis_sentinels_master_name'] = Gitlab['redis']['master_name'] || Gitlab['node']['redis']['master_name'] unless Gitlab['gitlab_kas'].key?('redis_sentinels_master_name')
127+
end
128+
108129
private
109130

110131
def parse_gitlab_kas_external_url_with_gitlab_domain

files/gitlab-cookbooks/gitlab-kas/recipes/enable.rb

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,26 @@
2626
gitlab_kas_config_file = File.join(working_dir, 'gitlab-kas-config.yml')
2727
gitlab_kas_authentication_secret_file = File.join(working_dir, 'authentication_secret_file')
2828
gitlab_kas_private_api_authentication_secret_file = File.join(working_dir, 'private_api_authentication_secret_file')
29-
redis_host, redis_port, redis_password = redis_helper.redis_params
29+
redis_host, redis_port, redis_password = redis_helper.kas_params
3030
redis_password_present = redis_password && !redis_password.empty?
31-
redis_sentinels = node['gitlab']['gitlab_rails']['redis_sentinels']
32-
redis_sentinels_master_name = node['redis']['master_name']
33-
redis_sentinels_password = node['gitlab']['gitlab_rails']['redis_sentinels_password']
31+
redis_sentinels = node['gitlab_kas']['redis_sentinels']
32+
redis_sentinels_master_name = node['gitlab_kas']['redis_sentinels_master_name']
33+
redis_sentinels_password = node['gitlab_kas']['redis_sentinels_password']
3434
redis_sentinels_password_present = redis_sentinels_password && !redis_sentinels_password.empty?
3535

3636
gitlab_kas_redis_password_file = File.join(working_dir, 'redis_password_file')
3737
gitlab_kas_redis_sentinels_password_file = File.join(working_dir, 'redis_sentinels_password_file')
3838
redis_default_port = URI::Redis::DEFAULT_PORT
3939
redis_network = redis_helper.redis_url.scheme == 'unix' ? 'unix' : 'tcp'
40-
redis_ssl = node['gitlab']['gitlab_rails']['redis_ssl']
40+
redis_ssl = node['gitlab_kas']['redis_ssl']
4141
redis_address = if redis_network == 'tcp'
4242
"#{redis_host}:#{redis_port || redis_default_port}"
4343
else
44-
node['gitlab']['gitlab_rails']['redis_socket']
44+
node['gitlab_kas']['redis_socket']
4545
end
46+
redis_tls_ca_cert_file = node['gitlab_kas']['redis_tls_ca_cert_file']
47+
redis_tls_client_cert_file = node['gitlab_kas']['redis_tls_client_cert_file']
48+
redis_tls_client_key_file = node['gitlab_kas']['redis_tls_client_key_file']
4649

4750
[
4851
working_dir,
@@ -119,6 +122,9 @@
119122
redis_network: redis_network,
120123
redis_address: redis_address,
121124
redis_ssl: redis_ssl,
125+
redis_tls_ca_cert_file: redis_tls_ca_cert_file,
126+
redis_tls_client_cert_file: redis_tls_client_cert_file,
127+
redis_tls_client_key_file: redis_tls_client_key_file,
122128
redis_default_port: redis_default_port,
123129
redis_password_file: redis_password_present ? gitlab_kas_redis_password_file : nil,
124130
redis_sentinels_master_name: redis_sentinels_master_name,

files/gitlab-cookbooks/gitlab-kas/templates/default/gitlab-kas-config.yml.erb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ redis:
4545
network: <%= @redis_network %>
4646
tls:
4747
enabled: <%= @redis_ssl %>
48+
<%- if @redis_ssl %>
49+
<%- if @redis_tls_ca_cert_file %>
50+
ca_certificate_file: "<%= @redis_tls_ca_cert_file %>"
51+
<% end %>
52+
<%- if @redis_tls_client_cert_file %>
53+
certificate_file: "<%= @redis_tls_client_cert_file %>"
54+
<% end %>
55+
<%- if @redis_tls_client_key_file %>
56+
key_file: "<%= @redis_tls_client_key_file %>"
57+
<% end %>
58+
<% end %>
4859
<%- if @redis_password_file %>
4960
password_file: <%= @redis_password_file %>
5061
<%- end %>

files/gitlab-cookbooks/gitlab/libraries/redis_helper.rb

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@ def redis
1313
@node['redis']
1414
end
1515

16-
def redis_params(support_sentinel_groupname: true)
17-
gitlab_rails_config = @node['gitlab']['gitlab_rails']
18-
16+
def redis_params(service_config: @node['gitlab']['gitlab_rails'], support_sentinel_groupname: true)
1917
raise 'Redis announce_ip and announce_ip_from_hostname are mutually exclusive, please unset one of them' if redis['announce_ip'] && redis['announce_ip_from_hostname']
2018

2119
params = if RedisHelper::Checks.has_sentinels? && support_sentinel_groupname
2220
[redis['master_name'], redis['master_port'], redis['master_password']]
2321
else
24-
host = gitlab_rails_config['redis_host'] || Gitlab['redis']['master_ip']
25-
port = gitlab_rails_config['redis_port'] || Gitlab['redis']['master_port']
26-
password = gitlab_rails_config['redis_password'] || Gitlab['redis']['master_password']
22+
host = service_config['redis_host'] || Gitlab['redis']['master_ip']
23+
port = service_config['redis_port'] || Gitlab['redis']['master_port']
24+
password = service_config['redis_password'] || Gitlab['redis']['master_password']
2725

2826
[host, port, password]
2927
end
@@ -75,6 +73,10 @@ def workhorse_params
7573
end
7674
end
7775

76+
def kas_params
77+
redis_params(service_config: @node['gitlab_kas'])
78+
end
79+
7880
def validate_instance_shard_config(instance)
7981
gitlab_rails = @node['gitlab']['gitlab_rails']
8082

0 commit comments

Comments
 (0)