你好,当我使用节点端口公开我的redis服务时,它工作得很好。我可以访问它。但是,如果我尝试切换到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
发布于 2020-07-16 17:40:49
Redis在6379上工作,它是非HTTP端口(80,443)。因此,您需要在nginx入口控制器中启用TCP/UDP支持。minikube 这里展示了如何为redis做这件事。
更新TCP和/或UDP服务configmap
借鉴有关使用ingress控制器配置TCP和UDP服务的教程,我们将需要编辑configmap,这是默认情况下在启用minikube入口插件时安装的。
有两个configmap,一个用于TCP服务,一个用于UDP服务。默认情况下,它们看起来如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx由于这些configmap是集中式的,并且可能包含配置,所以最好只对它们进行修补,而不是完全覆盖它们。
让我们以这个redis部署为例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
namespace: default
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- image: redis
imagePullPolicy: Always
name: redis
ports:
- containerPort: 6379
protocol: TCP创建一个文件redis-deployment.yaml并粘贴上面的内容。然后使用以下命令安装redis部署:
kubectl apply -f redis-deployment.yaml接下来,我们需要创建一个可以将流量路由到我们的吊舱的服务:
apiVersion: v1
kind: Service
metadata:
name: redis-service
namespace: default
spec:
selector:
app: redis
type: ClusterIP
ports:
- name: tcp-port
port: 6379
targetPort: 6379
protocol: TCP创建一个文件redis-service.yaml并粘贴上面的内容。然后使用以下命令安装redis服务:
kubectl apply -f redis-service.yaml要将TCP服务添加到nginx入口控制器,可以运行以下命令:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'其中:
6379:您的服务应该从小型虚拟机外部监听端口
default:安装服务的命名空间
redis-service:服务的名称
我们可以验证我们的资源是否使用以下命令进行修补:
kubectl get configmap tcp-services -n kube-system -o yaml我们应该看到这样的情况:
apiVersion: v1
data:
"6379": default/redis-service:6379
kind: ConfigMap
metadata:
creationTimestamp: "2019-10-01T16:19:57Z"
labels:
addonmanager.kubernetes.io/mode: EnsureExists
name: tcp-services
namespace: kube-system
resourceVersion: "2857"
selfLink: /api/v1/namespaces/kube-system/configmaps/tcp-services
uid: 4f7fac22-e467-11e9-b543-080027057910您需要验证的唯一值是,data属性下有一个如下所示的值:
"6379": default/redis-service:6379修补入口-nginx-控制器
要从外部集群获得连接,必须完成最后一步。我们需要修补我们的nginx控制器,以便它正在监听端口6379,并可以将流量路由到您的服务。为此,我们需要创建一个修补程序文件。
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379创建一个名为ingress-nginx-controller-patch.yaml的文件并粘贴上面的内容。
接下来,使用以下命令应用更改:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system发布于 2022-03-09 15:48:28
我让它工作的方法是在nginx入口控制器上启用ssl-通过。一旦我的nginx入口控制器被修补,我就能连接。
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redis-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
spec:
tls:
- hosts:
- <host_address>
secretName: <k8s_secret_name>
rules:
- host: <host_address>
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: redis-service
port:
number: 6380连接python片段
import redis
r = redis.StrictRedis(host='<host_address>',
port=443, db=0, ssl=True,
ssl_ca_certs='server.pem')
print(r.ping())在我的例子中,我确实使用了redistls。
https://stackoverflow.com/questions/62939846
复制相似问题