你好,当我使用节点端口公开我的redis服务时,它工作正常。我可以访问它。但如果我尝试切换到ingress nginx控制器,它会拒绝连接。。其他应用程序可以很好地处理入口。
这是我的服务:
apiVersion: v1
kind: Service
metadata:
name: redis-svc
spec:
# type: NodePort
ports:
- name: http
port: 6379
targetPort: 6379
protocol: TCP
# nodePort: 30007
selector:
app: redis
这里是入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: redis-ing
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
# nginx.ingress.kubernetes.io/enable-cors: "true"
# nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
# nginx.ingress.kubernetes.io/cors-allow-origin: "https://test.hefest.io"
# nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
spec:
tls:
- secretName: letsencrypt-prod
hosts:
- redis-dev.domain.com
rules:
- host: redis-dev.domain.com
http:
paths:
- path: /
backend:
serviceName: redis-svc
servicePort: 6379
你知道什么是问题吗?
我正在使用此入口控制器:https://github.com/nginxinc/kubernetes-ingress
1条答案
按热度按时间hs1ihplo1#
redis工作于6379,这是一个非http端口(80443)。所以您需要在nginx入口控制器中启用tcp/udp支持。这里的minikube文档展示了如何为redis做这件事。
更新tcp和/或udp服务配置Map
借用有关使用ingres nginx控制器配置tcp和udp服务的教程,我们将需要编辑configmap,在启用minikube ingres插件时默认安装configmap。
有2个配置Map,1个用于tcp服务,1个用于udp服务。默认情况下,它们如下所示:
由于这些配置Map是集中的,并且可能包含配置,因此最好只修补它们,而不是完全覆盖它们。
我们以这个redis部署为例:
创建一个文件
redis-deployment.yaml
并粘贴上面的内容。然后使用以下命令安装redis部署:接下来,我们需要创建一个可以将流量路由到我们的pod的服务:
创建一个文件
redis-service.yaml
并粘贴上面的内容。然后使用以下命令安装redis服务:要向nginx入口控制器添加tcp服务,可以运行以下命令:
哪里:
6379
:服务应该从minikube虚拟机外部侦听的端口default
:安装服务的命名空间redis-service
:服务的名称我们可以使用以下命令验证资源是否已修补:
我们应该看到这样的情况:
唯一需要验证的值是,数据属性下有一个如下所示的值:
修补ingress nginx控制器
为了从外部集群获得连接,必须完成最后一步。我们需要修补我们的nginx控制器,使其监听端口6379,并可以路由到您的服务流量。为此,我们需要创建一个补丁文件。
创建一个名为
ingress-nginx-controller-patch.yaml
并粘贴上面的内容。接下来使用以下命令应用更改: