Vla*_*kic 7 redis kubernetes nginx-ingress
你好,当我使用节点端口公开我的 redis 服务时,它工作正常。我能够访问它。但如果我尝试切换到 Ingress Nginx 控制器,它会拒绝连接。其他应用程序可以与 Ingress 配合使用。
这是我的服务:
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
Run Code Online (Sandbox Code Playgroud)
这是入口:
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
Run Code Online (Sandbox Code Playgroud)
知道会出现什么问题吗?
我正在使用这个入口控制器: https: //github.com/nginxinc/kubernetes-ingress
Redis 工作在 6379 上,它不是 HTTP 端口(80,443)。因此,您需要在 nginx 入口控制器中启用TCP/UDP 支持。这里的minikube 文档展示了如何为 redis 执行此操作。
\n更新 TCP 和/或 UDP 服务配置映射
\n借用有关使用 ingress nginx 控制器配置 TCP 和 UDP 服务的教程,我们需要编辑启用 minikube ingress 插件时默认安装的 configmap。
\n有 2 个配置映射,1 个用于 TCP 服务,1 个用于 UDP 服务。默认情况下,它们看起来像这样:
\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: tcp-services\n namespace: ingress-nginx\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: udp-services\n namespace: ingress-nginx\n
Run Code Online (Sandbox Code Playgroud)\n由于这些配置映射是集中的并且可能包含配置,因此最好我们只修补它们而不是完全覆盖它们。
\n让\xe2\x80\x99s以此redis部署为例:
\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: redis-deployment\n namespace: default\n labels:\n app: redis\nspec:\n replicas: 1\n selector:\n matchLabels:\n app: redis\n template:\n metadata:\n labels:\n app: redis\n spec:\n containers:\n - image: redis\n imagePullPolicy: Always\n name: redis\n ports:\n - containerPort: 6379\n protocol: TCP\n
Run Code Online (Sandbox Code Playgroud)\n创建一个文件redis-deployment.yaml
并粘贴上面的内容。然后使用以下命令安装redis部署:
kubectl apply -f redis-deployment.yaml\n
Run Code Online (Sandbox Code Playgroud)\n接下来我们需要创建一个可以将流量路由到我们的 Pod 的服务:
\napiVersion: v1\nkind: Service\nmetadata:\n name: redis-service\n namespace: default\nspec:\n selector:\n app: redis\n type: ClusterIP\n ports:\n - name: tcp-port\n port: 6379\n targetPort: 6379\n protocol: TCP\n
Run Code Online (Sandbox Code Playgroud)\n创建一个文件redis-service.yaml
并粘贴上面的内容。然后使用以下命令安装redis服务:
kubectl apply -f redis-service.yaml\n
Run Code Online (Sandbox Code Playgroud)\n要将 TCP 服务添加到 nginx 入口控制器,您可以运行以下命令:
\nkubectl patch configmap tcp-services -n kube-system --patch \'{"data":{"6379":"default/redis-service:6379"}}\'\n
Run Code Online (Sandbox Code Playgroud)\n在哪里:
\n6379
:您的服务应从 minikube 虚拟机外部侦听的端口
default
:您的服务安装的命名空间
redis-service
: 服务名称
我们可以使用以下命令验证我们的资源是否已修补:
\nkubectl get configmap tcp-services -n kube-system -o yaml\n
Run Code Online (Sandbox Code Playgroud)\n我们应该看到这样的东西:
\napiVersion: v1\ndata:\n "6379": default/redis-service:6379\nkind: ConfigMap\nmetadata:\n creationTimestamp: "2019-10-01T16:19:57Z"\n labels:\n addonmanager.kubernetes.io/mode: EnsureExists\n name: tcp-services\n namespace: kube-system\n resourceVersion: "2857"\n selfLink: /api/v1/namespaces/kube-system/configmaps/tcp-services\n uid: 4f7fac22-e467-11e9-b543-080027057910\n
Run Code Online (Sandbox Code Playgroud)\n您需要验证的唯一值是 data 属性下有一个如下所示的值:
\n"6379": default/redis-service:6379\n
Run Code Online (Sandbox Code Playgroud)\n修补 ingress-nginx-controller
\n为了从外部集群获得连接,必须完成最后一步。我们需要修补 nginx 控制器,以便它侦听端口 6379 并可以将流量路由到您的服务。为此,我们需要创建一个补丁文件。
\nspec:\n template:\n spec:\n containers:\n - name: ingress-nginx-controller\n ports:\n - containerPort: 6379\n hostPort: 6379\n
Run Code Online (Sandbox Code Playgroud)\n创建一个名为的文件ingress-nginx-controller-patch.yaml
并粘贴上面的内容。
接下来使用以下命令应用更改:
\nkubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
12497 次 |
最近记录: |