我已经在我的 EKS 集群 Pod 中部署了 Rabbitmq Statefulset,并且已启动并运行,并且我还可以执行端口转发,以使用 localhost:端口号测试 Rabbitmq UI 页面服务连接。
为了实现 TCP 端口公开,我在运行 Rabbitmq pod 的默认命名空间中创建了 configmap。
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
data:
5672: "default/rabbitmq-service:5672"
按照上面的配置映射,我创建了 Rabbitmq 服务作为 clusterIP 服务
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
labels:
app: rabbitmq
spec:
selector:
app: rabbitmq
ports:
- name: http
protocol: TCP
port: 15672
targetPort: 15672
- name: amqp
protocol: TCP
port: 5672
targetPort: 5672
- name: amqps
protocol: TCP
port: 5671
targetPort: 5671
最后是 nginx ingress yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
name: rabbit-ingress
spec:
ingressClassName: nginx
rules:
- host:my-host.com
http:
paths:
- backend:
service:
name: rabbitmq
port:
number: 5672
path: /
pathType: Prefix
应用所有配置后如何测试和验证 TCP 连接端口连接。
来自官方Kubernetes文档
Ingress 不会公开任意端口或协议。将 HTTP 和 HTTPS 以外的服务公开到互联网通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。
因此您可以使用 LoadBalancer 类型的服务
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
spec:
type: LoadBalancer
ports:
- appProtocol: amqps
name: amqps
port: 5671
protocol: TCP
targetPort: 5671
selector:
app: rabbitmq