微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Azure Kubernetes 集群 (AKS) 上的 Nginx Ingress 上配置 TCP 端口

如何解决在 Azure Kubernetes 集群 (AKS) 上的 Nginx Ingress 上配置 TCP 端口

我需要在我的 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 记录,以指向入口控制器的公共 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: /$1
spec:
  tls:
  - hosts:
    - my.domain.com
    secretName: tls-secret
  rules:
    - http:
        paths:
          - backend:
              serviceName: rabbitmq-cluster
              servicePort: 15672
            path: /(.*)

我可以通过域名从外部导航到我的集群,并使用有效的 https 查看控制面板(内部在 15672 上)。因此入口已启动并正在运行,我可以创建队列等...因此 rabbitmq 可以正常工作。

但是,我无法让 TCP 部分工作以从集群外部发布到队列。

我已经通过 azure 编辑了我认为是控制器(nginx-ingress-ingress-Nginx-controller)的配置映射(azure - cluster - configuration - nginx-ingress-ingress-Nginx-controller)的 yaml门户界面并将其添加到末尾

data:
  '5672': 'default/rabbitmq-cluster:5672'

然后我通过 azure 门户为服务本身编辑了他们的 yaml 并将其添加到末尾

  - name: amqp
      protocol: TCP
      port: 5672

但是,当我尝试使用测试客户端访问我的域时,请求会超时。 (当我使用 LoadBalancer 并且只命中集群的外部 IP 时,客户端可以工作,所以我知道客户端代码应该可以工作)

还有什么我应该做的吗?

解决方法

我认为这里的问题是 helm 配置了太多我自己的东西,我无法自定义太多。

我用 helm 卸载了入口并将入口创建脚本更改为:

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 端口转发,我不需要做任何其他事情。我不知道它是否影响了它,但这似乎“破坏”了我的 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: /$1
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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。