在 Azure Kubernetes 集群 (AKS) 上的 Nginx Ingress 上配置 TCP 端口
Configure TCP Port on Nginx Ingress on Azure Kubernetes Cluster (AKS)
我需要在我的 AKS 集群上配置一个 TCP 端口以允许 RabbitMQ 工作
我已经用helm安装了nginx-ingress,如下:
kubectl create namespace ingress-basic
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
我已经通过我们的 DNS 提供商设置了一条 A 记录,以指向入口控制器的 public IP。
我已经创建了一个 TLS 密钥(以启用 https)
我创建了一个入口路由:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: rabbit-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- my.domain.com
secretName: tls-secret
rules:
- http:
paths:
- backend:
serviceName: rabbitmq-cluster
servicePort: 15672
path: /(.*)
我可以从外部通过域名导航到我的集群,并使用有效的 https 查看控制面板(内部在 15672)。所以入口已启动 运行,我可以创建队列等...所以 rabbitmq 正常工作。
但是,我无法让 TCP 部分工作 post 从集群外部到队列。
我已经编辑了我认为是控制器(nginx-ingress-ingress-nginx-controller)的configmap(azure-cluster-configuration-nginx-ingress-ingress-nginx-controller)的yaml Azure 门户界面并将其添加到末尾
data:
'5672': 'default/rabbitmq-cluster:5672'
然后我通过 Azure 门户编辑了服务本身的 yaml 并将其添加到末尾
- name: amqp
protocol: TCP
port: 5672
但是,当我尝试使用测试客户端访问我的域时,请求就超时了。 (当我使用 LoadBalancer 时客户端工作并且只命中集群的外部 IP,所以我知道客户端代码应该工作)
还有我应该做的其他步骤吗?
我认为这里的问题是 helm 配置了太多我自己的东西,以至于我无法自定义太多。
我用 helm 卸载了 ingress 并将 ingress 创建脚本更改为:
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set tcp.5672="default/rabbitmq-cluster:5672"
其中预先配置了 TCP 端口转发,我无需执行任何其他操作。我不知道它是否影响了它,但这似乎 'break' 我的 SSL 实现,所以我将入口路由创建脚本从 v1beta 升级到 v1,并且 https 再次完美运行。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rabbit-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- my.domain.com
secretName: tls-secret
rules:
- host: my.domain.com
http:
paths:
- path: /(.*)
pathType: Prefix
backend:
service:
name: rabbitmq-cluster
port:
number: 15672
我需要在我的 AKS 集群上配置一个 TCP 端口以允许 RabbitMQ 工作
我已经用helm安装了nginx-ingress,如下:
kubectl create namespace ingress-basic
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
我已经通过我们的 DNS 提供商设置了一条 A 记录,以指向入口控制器的 public IP。
我已经创建了一个 TLS 密钥(以启用 https)
我创建了一个入口路由:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: rabbit-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- my.domain.com
secretName: tls-secret
rules:
- http:
paths:
- backend:
serviceName: rabbitmq-cluster
servicePort: 15672
path: /(.*)
我可以从外部通过域名导航到我的集群,并使用有效的 https 查看控制面板(内部在 15672)。所以入口已启动 运行,我可以创建队列等...所以 rabbitmq 正常工作。
但是,我无法让 TCP 部分工作 post 从集群外部到队列。
我已经编辑了我认为是控制器(nginx-ingress-ingress-nginx-controller)的configmap(azure-cluster-configuration-nginx-ingress-ingress-nginx-controller)的yaml Azure 门户界面并将其添加到末尾
data:
'5672': 'default/rabbitmq-cluster:5672'
然后我通过 Azure 门户编辑了服务本身的 yaml 并将其添加到末尾
- name: amqp
protocol: TCP
port: 5672
但是,当我尝试使用测试客户端访问我的域时,请求就超时了。 (当我使用 LoadBalancer 时客户端工作并且只命中集群的外部 IP,所以我知道客户端代码应该工作)
还有我应该做的其他步骤吗?
我认为这里的问题是 helm 配置了太多我自己的东西,以至于我无法自定义太多。
我用 helm 卸载了 ingress 并将 ingress 创建脚本更改为:
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set tcp.5672="default/rabbitmq-cluster:5672"
其中预先配置了 TCP 端口转发,我无需执行任何其他操作。我不知道它是否影响了它,但这似乎 'break' 我的 SSL 实现,所以我将入口路由创建脚本从 v1beta 升级到 v1,并且 https 再次完美运行。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rabbit-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- my.domain.com
secretName: tls-secret
rules:
- host: my.domain.com
http:
paths:
- path: /(.*)
pathType: Prefix
backend:
service:
name: rabbitmq-cluster
port:
number: 15672