mysql - 通过 eks 中的 nginx 入口访问 MySQL 端点时出错
问题描述
我在 aws eks 上有 3 个节点。
我想使用 mysql 客户端并通过 Nginx Ingress 访问数据库。
这是我的 yaml。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: ext-nginx
nginx.ingress.kubernetes.io/rewrite-target: /
name: ext-nginx-ingress
namespace: ext-nginx-ingress
spec:
rules:
- host: mysql.***********.com
http:
paths:
- backend:
serviceName: mysql-svc
servicePort: 3306
path: /
pathType: ImplementationSpecific
- backend:
serviceName: nginx-svc
servicePort: 80
path: /nginx
pathType: ImplementationSpecific
描述我的入口服务
tes.io/name=ingress-nginx
Type: LoadBalancer
IP: 172.20.209.228
LoadBalancer Ingress: ************.elb.ap-northeast-2.amazonaws.com
Port: http 80/TCP
TargetPort: http/TCP
NodePort: http 31218/TCP
Endpoints: 10.11.53.243:80
Port: https 443/TCP
TargetPort: https/TCP
NodePort: https 31308/TCP
Endpoints: 10.11.53.243:443
Port: proxie-tcp-mysql 3306/TCP
TargetPort: mysql/TCP
NodePort: proxie-tcp-mysql 32514/TCP
Endpoints:
Session Affinity: None
External Traffic Policy: Cluster
配置图
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ext-nginx-ingress
data:
3306: ext-nginx-ingress/mysql-svc:3306
可通过 telnet 80 端口访问,但不能通过 mysql 客户端访问。
telnet mysql.*****.com 80
Trying 3.******...
Connected to mysql.******.com.
在与 nlb 关联的目标组中,与 3306 端口关联的节点端口处于不健康状态。
Port: proxie-tcp-mysql 3306/TCP
TargetPort: mysql/TCP
NodePort: proxie-tcp-mysql 32514/TCP
感谢您的阅读。MYSQL Pod 和 Service 创建良好的端点。
解决方案
我想使用 mysql 客户端并通过 Nginx Ingress 访问数据库。
你不能。Nginx 是一个 HTTP 服务器,但 MySQL 通过 TCP 使用自己的二进制协议。
通常,您根本不希望您的数据库在集群之外发布,因为任何可以访问数据库的人都可以绕过应用程序中的所有检查和限制。为数据库设置一个 ClusterIP 服务,如果你确实需要作为操作员连接到它,使用kubectl port-forward
它来连接它。
如果确实需要在集群外发布,则需要使用 NodePort 或 LoadBalancer 服务。由于它不是 HTTP 服务,因此不能使用 Kubernetes 入口系统。
推荐阅读
- machine-learning - 如何在bert之上添加新层?
- android - 如何使用 Cordova 从现有的 Angular Web 应用程序制作 Android 应用程序?
- stripe-payments - Stripe-API:PaymentIntent 是否支持幂等请求?
- iframe - 如何包装 iframe 以使其更大
- java - 如何将@DefaultProperty 注释正确添加到使用@NamedArg 的自定义类
- pandas - 快速检查多边形是否包含数据框之间的点
- elasticsearch - Logstash JDBC:更新行问题
- ios - 在 Xcode 11 beta 6 上出现错误“cdtool 无法编译 [0]”
- sql - 我需要将 SQL 中的所有活动分配给一个 ID,但目前每个活动都有三个不同的 ID
- android - 如何将实时移动摄像头馈送到计算机?