RabbitMQ: Allow clients to directly connect to servers
This PS updates the rabbitmq chart, to allow clients to connect directly to backend servers, and also introduces a htk function to produce the appropriate transport_url used by oslo.messaging to take advantage of this functionaility. Change-Id: I5150a64bd29fa062e30496c1f2127de138322863 Signed-off-by: Pete Birley <pete@port.direct>
This commit is contained in:
parent
b2f47aabb1
commit
0925f50e2a
@ -0,0 +1,123 @@
|
|||||||
|
{{/*
|
||||||
|
Copyright 2017 The Openstack-Helm Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
abstract: |
|
||||||
|
Resolves endpoint string suitible for use with oslo.messaging transport url
|
||||||
|
See: https://docs.openstack.org/oslo.messaging/latest/reference/transport.html#oslo_messaging.TransportURL
|
||||||
|
examples:
|
||||||
|
- values: |
|
||||||
|
endpoints:
|
||||||
|
cluster_domain_suffix: cluster.local
|
||||||
|
oslo_messaging:
|
||||||
|
auth:
|
||||||
|
cinder:
|
||||||
|
username: cinder
|
||||||
|
password: password
|
||||||
|
statefulset:
|
||||||
|
replicas: 2
|
||||||
|
name: rabbitmq-rabbitmq
|
||||||
|
hosts:
|
||||||
|
default: rabbitmq
|
||||||
|
host_fqdn_override:
|
||||||
|
default: null
|
||||||
|
path: /cinder
|
||||||
|
scheme: rabbit
|
||||||
|
port:
|
||||||
|
amqp:
|
||||||
|
default: 5672
|
||||||
|
usage: |
|
||||||
|
{{ tuple "oslo_messaging" "internal" "cinder" "amqp" . | include "helm-toolkit.endpoints.authenticated_transport_endpoint_uri_lookup" }}
|
||||||
|
return: |
|
||||||
|
rabbit://cinder:password@rabbitmq-rabbitmq-0.rabbitmq.default.svc.cluster.local:5672,cinder:password@rabbitmq-rabbitmq-1.rabbitmq.default.svc.cluster.local:5672/cinder
|
||||||
|
- values: |
|
||||||
|
endpoints:
|
||||||
|
cluster_domain_suffix: cluster.local
|
||||||
|
oslo_messaging:
|
||||||
|
auth:
|
||||||
|
cinder:
|
||||||
|
username: cinder
|
||||||
|
password: password
|
||||||
|
statefulset: null
|
||||||
|
hosts:
|
||||||
|
default: rabbitmq
|
||||||
|
host_fqdn_override:
|
||||||
|
default: null
|
||||||
|
path: /cinder
|
||||||
|
scheme: rabbit
|
||||||
|
port:
|
||||||
|
amqp:
|
||||||
|
default: 5672
|
||||||
|
usage: |
|
||||||
|
{{ tuple "oslo_messaging" "internal" "cinder" "amqp" . | include "helm-toolkit.endpoints.authenticated_transport_endpoint_uri_lookup" }}
|
||||||
|
return: |
|
||||||
|
rabbit://cinder:password@rabbitmq.default.svc.cluster.local:5672/cinder
|
||||||
|
- values: |
|
||||||
|
endpoints:
|
||||||
|
cluster_domain_suffix: cluster.local
|
||||||
|
oslo_messaging:
|
||||||
|
auth:
|
||||||
|
cinder:
|
||||||
|
username: cinder
|
||||||
|
password: password
|
||||||
|
statefulset:
|
||||||
|
replicas: 2
|
||||||
|
name: rabbitmq-rabbitmq
|
||||||
|
hosts:
|
||||||
|
default: rabbitmq
|
||||||
|
host_fqdn_override:
|
||||||
|
default: rabbitmq.openstackhelm.org
|
||||||
|
path: /cinder
|
||||||
|
scheme: rabbit
|
||||||
|
port:
|
||||||
|
amqp:
|
||||||
|
default: 5672
|
||||||
|
usage: |
|
||||||
|
{{ tuple "oslo_messaging" "internal" "cinder" "amqp" . | include "helm-toolkit.endpoints.authenticated_transport_endpoint_uri_lookup" }}
|
||||||
|
return: |
|
||||||
|
rabbit://cinder:password@rabbitmq.openstackhelm.org:5672/cinder
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- define "helm-toolkit.endpoints.authenticated_transport_endpoint_uri_lookup" -}}
|
||||||
|
{{- $type := index . 0 -}}
|
||||||
|
{{- $endpoint := index . 1 -}}
|
||||||
|
{{- $userclass := index . 2 -}}
|
||||||
|
{{- $port := index . 3 -}}
|
||||||
|
{{- $context := index . 4 -}}
|
||||||
|
{{- $endpointScheme := tuple $type $endpoint $port $context | include "helm-toolkit.endpoints.keystone_endpoint_scheme_lookup" }}
|
||||||
|
{{- $userMap := index $context.Values.endpoints ( $type | replace "-" "_" ) "auth" $userclass }}
|
||||||
|
{{- $ssMap := index $context.Values.endpoints ( $type | replace "-" "_" ) "statefulset" | default false}}
|
||||||
|
{{- $hostFqdnOverride := index $context.Values.endpoints ( $type | replace "-" "_" ) "host_fqdn_override" }}
|
||||||
|
{{- $endpointUser := index $userMap "username" }}
|
||||||
|
{{- $endpointPass := index $userMap "password" }}
|
||||||
|
{{- $endpointHostSuffix := tuple $type $endpoint $context | include "helm-toolkit.endpoints.endpoint_host_lookup" }}
|
||||||
|
{{- $endpointPort := tuple $type $endpoint $port $context | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
||||||
|
{{- $local := dict "endpointCredsAndHosts" list -}}
|
||||||
|
{{- if not (or (index $hostFqdnOverride $endpoint | default ( index $hostFqdnOverride "default" ) ) ( not $ssMap ) ) }}
|
||||||
|
{{- $endpointHostPrefix := $ssMap.name }}
|
||||||
|
{{- range $podInt := until ( atoi (print $ssMap.replicas ) ) }}
|
||||||
|
{{- $endpointCredAndHost := printf "%s:%s@%s-%d.%s:%s" $endpointUser $endpointPass $endpointHostPrefix $podInt $endpointHostSuffix $endpointPort }}
|
||||||
|
{{- $_ := set $local "endpointCredsAndHosts" ( append $local.endpointCredsAndHosts $endpointCredAndHost ) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $endpointHost := tuple $type $endpoint $context | include "helm-toolkit.endpoints.endpoint_host_lookup" }}
|
||||||
|
{{- $endpointCredAndHost := printf "%s:%s@%s:%s" $endpointUser $endpointPass $endpointHost $endpointPort }}
|
||||||
|
{{- $_ := set $local "endpointCredsAndHosts" ( append $local.endpointCredsAndHosts $endpointCredAndHost ) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $endpointCredsAndHosts := include "helm-toolkit.utils.joinListWithComma" $local.endpointCredsAndHosts }}
|
||||||
|
{{- $endpointPath := tuple $type $endpoint $port $context | include "helm-toolkit.endpoints.keystone_endpoint_path_lookup" }}
|
||||||
|
{{- printf "%s://%s%s" $endpointScheme $endpointCredsAndHosts $endpointPath }}
|
||||||
|
{{- end -}}
|
@ -1,39 +0,0 @@
|
|||||||
{{/*
|
|
||||||
Copyright 2017 The Openstack-Helm Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/}}
|
|
||||||
|
|
||||||
{{- if .Values.manifests.service_discovery }}
|
|
||||||
{{- $envAll := . }}
|
|
||||||
{{- if empty $envAll.Values.endpoints.oslo_messaging.hosts.discovery }}
|
|
||||||
{{- $service_discovery_name := .Release.Name | trunc 12 }}
|
|
||||||
{{- $_ := set $envAll.Values.endpoints.oslo_messaging.hosts "discovery" ( printf "%s-%s-%s" $service_discovery_name "dsv" ( $service_discovery_name | sha256sum | trunc 6 )) }}
|
|
||||||
{{- end }}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: {{ tuple "oslo_messaging" "discovery" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
|
||||||
spec:
|
|
||||||
ports:
|
|
||||||
- port: {{ tuple "oslo_messaging" "internal" "amqp" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
|
||||||
name: amqp
|
|
||||||
- port: {{ add (tuple "oslo_messaging" "internal" "amqp" . | include "helm-toolkit.endpoints.endpoint_port_lookup") 20000 }}
|
|
||||||
name: clustering
|
|
||||||
- port: {{ tuple "oslo_messaging" "internal" "http" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
|
||||||
name: http
|
|
||||||
clusterIP: None
|
|
||||||
selector:
|
|
||||||
{{ tuple $envAll "rabbitmq" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
|
|
||||||
{{ end }}
|
|
@ -22,13 +22,14 @@ kind: Service
|
|||||||
metadata:
|
metadata:
|
||||||
name: {{ tuple "oslo_messaging" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
name: {{ tuple "oslo_messaging" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
||||||
spec:
|
spec:
|
||||||
|
clusterIP: None
|
||||||
ports:
|
ports:
|
||||||
- port: {{ tuple "oslo_messaging" "internal" "amqp" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
- port: {{ tuple "oslo_messaging" "internal" "amqp" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
||||||
name: amqp
|
name: amqp
|
||||||
- port: {{ add (tuple "oslo_messaging" "internal" "amqp" . | include "helm-toolkit.endpoints.endpoint_port_lookup") 20000 }}
|
- port: {{ add (tuple "oslo_messaging" "internal" "amqp" . | include "helm-toolkit.endpoints.endpoint_port_lookup") 20000 }}
|
||||||
name: clustering
|
name: clustering
|
||||||
- port: {{ tuple "oslo_messaging" "internal" "http" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
- port: {{ tuple "oslo_messaging" "internal" "http" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
|
||||||
name: http
|
name: http
|
||||||
selector:
|
selector:
|
||||||
{{ tuple $envAll "rabbitmq" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
|
{{ tuple $envAll "rabbitmq" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@ -16,10 +16,6 @@ limitations under the License.
|
|||||||
|
|
||||||
{{- if .Values.manifests.statefulset }}
|
{{- if .Values.manifests.statefulset }}
|
||||||
{{- $envAll := . }}
|
{{- $envAll := . }}
|
||||||
{{- if empty $envAll.Values.endpoints.oslo_messaging.hosts.discovery }}
|
|
||||||
{{- $service_discovery_name := .Release.Name | trunc 12 }}
|
|
||||||
{{- $_ := set $envAll.Values.endpoints.oslo_messaging.hosts "discovery" ( printf "%s-%s-%s" $service_discovery_name "dsv" ( $service_discovery_name | sha256sum | trunc 6 )) }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- $rcControllerName := printf "%s-%s" $envAll.Release.Name "rabbitmq" }}
|
{{- $rcControllerName := printf "%s-%s" $envAll.Release.Name "rabbitmq" }}
|
||||||
{{ tuple $envAll "rabbitmq" $rcControllerName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
|
{{ tuple $envAll "rabbitmq" $rcControllerName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
|
||||||
@ -65,7 +61,7 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
{{ tuple $envAll "rabbitmq" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
|
{{ tuple $envAll "rabbitmq" "server" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
|
||||||
spec:
|
spec:
|
||||||
serviceName: {{ tuple "oslo_messaging" "discovery" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
serviceName: {{ tuple "oslo_messaging" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
||||||
replicas: {{ $envAll.Values.pod.replicas.server }}
|
replicas: {{ $envAll.Values.pod.replicas.server }}
|
||||||
podManagementPolicy: "Parallel"
|
podManagementPolicy: "Parallel"
|
||||||
selector:
|
selector:
|
||||||
@ -178,13 +174,11 @@ spec:
|
|||||||
- name: RABBITMQ_USE_LONGNAME
|
- name: RABBITMQ_USE_LONGNAME
|
||||||
value: "true"
|
value: "true"
|
||||||
- name: RABBITMQ_NODENAME
|
- name: RABBITMQ_NODENAME
|
||||||
value: "rabbit@$(MY_POD_NAME).{{ tuple "oslo_messaging" "discovery" . | include "helm-toolkit.endpoints.hostname_fqdn_endpoint_lookup" }}"
|
value: "rabbit@$(MY_POD_NAME).{{ tuple "oslo_messaging" "internal" . | include "helm-toolkit.endpoints.hostname_fqdn_endpoint_lookup" }}"
|
||||||
- name: K8S_SERVICE_NAME
|
- name: K8S_SERVICE_NAME
|
||||||
value: {{ tuple "oslo_messaging" "discovery" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
value: {{ tuple "oslo_messaging" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
|
||||||
# NOTE(portdirect): We use the discovery fqdn here, as we resolve
|
|
||||||
# nodes via their pods hostname/nodename
|
|
||||||
- name: K8S_HOSTNAME_SUFFIX
|
- name: K8S_HOSTNAME_SUFFIX
|
||||||
value: ".{{ tuple "oslo_messaging" "discovery" . | include "helm-toolkit.endpoints.hostname_fqdn_endpoint_lookup" }}"
|
value: ".{{ tuple "oslo_messaging" "internal" . | include "helm-toolkit.endpoints.hostname_fqdn_endpoint_lookup" }}"
|
||||||
- name: RABBITMQ_ERLANG_COOKIE
|
- name: RABBITMQ_ERLANG_COOKIE
|
||||||
value: "{{ $envAll.Values.endpoints.oslo_messaging.auth.erlang_cookie }}"
|
value: "{{ $envAll.Values.endpoints.oslo_messaging.auth.erlang_cookie }}"
|
||||||
- name: PORT_HTTP
|
- name: PORT_HTTP
|
||||||
|
@ -95,7 +95,7 @@ pod:
|
|||||||
weight:
|
weight:
|
||||||
default: 10
|
default: 10
|
||||||
replicas:
|
replicas:
|
||||||
server: 3
|
server: 2
|
||||||
prometheus_rabbitmq_exporter: 1
|
prometheus_rabbitmq_exporter: 1
|
||||||
lifecycle:
|
lifecycle:
|
||||||
upgrades:
|
upgrades:
|
||||||
@ -267,10 +267,6 @@ endpoints:
|
|||||||
password: password
|
password: password
|
||||||
hosts:
|
hosts:
|
||||||
default: rabbitmq
|
default: rabbitmq
|
||||||
# NOTE(portdirect): If left empty, the release name sha suffixed with dsv
|
|
||||||
# will be used for to produce a unique hostname for clustering
|
|
||||||
# and discovery.
|
|
||||||
discovery: null
|
|
||||||
# NOTE(portdirect): the public host is only used to the management WUI
|
# NOTE(portdirect): the public host is only used to the management WUI
|
||||||
# If left empty, the release name sha suffixed with mgr, will be used to
|
# If left empty, the release name sha suffixed with mgr, will be used to
|
||||||
# produce an unique hostname.
|
# produce an unique hostname.
|
||||||
|
Loading…
Reference in New Issue
Block a user