kind:Service apiVersion:v1 metadata: namespace:test-rabbitmq name:rabbitmq labels: app:rabbitmq type:LoadBalancer spec: type:NodePort ports: -name:http protocol:TCP port:15672 targetPort:15672 nodePort:31672 -name:amqp protocol:TCP port:5672 targetPort:5672 nodePort:30672 selector: app:rabbitmq --- apiVersion:v1 kind:ConfigMap metadata: name:rabbitmq-config namespace:test-rabbitmq data: enabled_plugins:| [rabbitmq_management,rabbitmq_peer_discovery_k8s]. rabbitmq.conf:| ## Cluster formation. See http://www.rabbitmq.com/cluster-formation.html to learn more. cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s cluster_formation.k8s.host = kubernetes.default.svc.cluster.local ## Should RabbitMQ node name be computed from the pod's hostname or IP address? ## IP addresses are not stable, so using [stable] hostnames is recommended when possible. ## Set to "hostname" to use pod hostnames. ## When this value is changed, so should the variable used to set the RABBITMQ_NODENAME ## environment variable. cluster_formation.k8s.address_type = ip ## How often should node cleanup checks run? cluster_formation.node_cleanup.interval = 30 ## Set to false if automatic removal of unknown/absent nodes ## is desired. This can be dangerous, see ## * http://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup ## * https://groups.google.com/forum/#!msg/rabbitmq-users/wuOfzEywHXo/k8z_HWIkBgAJ cluster_formation.node_cleanup.only_log_warning = true cluster_partition_handling = autoheal ## See http://www.rabbitmq.com/ha.html#master-migration-data-locality queue_master_locator=min-masters ## See http://www.rabbitmq.com/access-control.html#loopback-users loopback_users.guest = false --- apiVersion:apps/v1beta1 kind:StatefulSet metadata: name:rabbitmq namespace:test-rabbitmq spec: serviceName:rabbitmq replicas:3 template: metadata: labels: app:rabbitmq spec: serviceAccountName:rabbitmq terminationGracePeriodSeconds:10 containers: -name:rabbitmq-k8s image:rabbitmq:3.7 volumeMounts: -name:config-volume mountPath:/etc/rabbitmq ports: -name:http protocol:TCP containerPort:15672 -name:amqp protocol:TCP containerPort:5672 livenessProbe: exec: command: ["rabbitmqctl", "status"] initialDelaySeconds:60 periodSeconds:60 timeoutSeconds:10 readinessProbe: exec: command: ["rabbitmqctl", "status"] initialDelaySeconds:20 periodSeconds:60 timeoutSeconds:10 imagePullPolicy:Always env: -name:MY_POD_IP valueFrom: fieldRef: fieldPath:status.podIP -name:RABBITMQ_USE_LONGNAME value:"true" # See a note on cluster_formation.k8s.address_type in the config file section -name:RABBITMQ_NODENAME value:"rabbit@$(MY_POD_IP)" -name:K8S_SERVICE_NAME value:"rabbitmq" -name:RABBITMQ_ERLANG_COOKIE value:"mycookie" volumes: -name:config-volume configMap: name:rabbitmq-config items: -key:rabbitmq.conf path:rabbitmq.conf -key:enabled_plugins path:enabled_plugins
但直接修改address_type 并不能满足要求,注释部分也描述了“Set to hostname to use pod hostnames. When this value is changed, so should the variable used to set the RABBITMQ_NODENAME”。那么RABBITMQ_NODENAME该如何设置,就必须先要了解如何用hostname访问pod