如何从客户端访问由Nginx Ingress + Kubernetes托管的MySql

Viv*_*mar 2 nginx docker kubernetes kubernetes-ingress

我是Kubernetes和Nginx Ingress工具的新手,现在我正尝试在AWS的Nginx Ingress中使用VHost托管MySql服务。我创建了一个类似于以下文件:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      protocol: TCP
  selector:
    app: mysql
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql
          imagePullPolicy: IfNotPresent
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: password
          ports:
            - name: http
              containerPort: 3306
              protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mysql
  labels:
    app: mysql
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: mysql.example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: mysql
              servicePort: 3306
Run Code Online (Sandbox Code Playgroud)

我的LoadBalancer(由Nginx Ingress创建)端口配置如下所示:

80 (TCP) forwarding to 32078 (TCP)
Stickiness options not available for TCP protocols

443 (TCP) forwarding to 31480 (TCP)
Stickiness options not available for TCP protocols
Run Code Online (Sandbox Code Playgroud)

mysql.example.com指向我的ELB。

我期待的是类似的东西,如果尝试类似的东西,我可以从本地框中连接到MySql:

mysql -h mysql.example.com -u root -P 80 -p
Run Code Online (Sandbox Code Playgroud)

哪个没有解决。如果我尝试使用LoadBalancer而不是NodePort,它将为我创建一个按预期工作的新ELB。

我不确定这是否是我想要在这里实现的正确方法。如果可以使用Ingress和NodePort实现相同的方法,请帮助我。

Rad*_*nka 5

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposed-tcp中所述,Kubernetes Ingress作为通用概念不能解决暴露/路由TCP / UDP服务的问题。-udp-services.md如果需要通过入口使用,则应使用自定义configmap。并且请注意,它将永远不会使用主机名进行路由,因为这是HTTP(而非TCP)的功能。

  • **请注意,它永远不会使用主机名进行路由,因为这是 HTTP 的一个特性,而不是 TCP。** 我认为这个声明回答了我的问题的原因。 (2认同)