如何在k8s中连接到我的mysql pod或mysql的节点?

时间:2019-05-10 02:27:45

标签: mysql go kubernetes

我将mysql pod部署到我的k8s。这是配置, 我对端口感到困惑,就像这样:

kind: Deployment
...
   containers:
     - ports:
        - containerPort: 3306  # @1
---

apiVersion: v1
kind: Service 
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  selector:
    app: mysql

  # way 1
  ports:
    - port: 3306  # @2

      targetPort: 3306  # @3

  # way 2
  type: NodePort
  ports: 
    - port: 3306
      targetPort: 3306
      nodePort: 30600


@ question1。谁代理此端口 @问题2。这是什么端口?我的意思是容器已经暴露了端口3306,服务也暴露了。在我的单个节点中,这些不会冲突吗? @ question3。这个端口是指容器暴露的端口吗?

问题4:当我用方法1.部署此服务器时,如何从pods和localMachine访问我的mysql服务器。

问题5:当我使用方法2进行部署时,如何从pods和localMachine访问我的mysql服务器。

1 个答案:

答案 0 :(得分:1)

  1. Pod侦听端口,服务代理端口。
  2. Pod侦听端口3306,“仅服务”将端口3306代理到Pod。服务不监听端口,它只是一个简单的iptables规则。
  3. 创建默认的ClusterIP服务时,可以从Pod中按主机名“ mysql”访问数据库。除非您执行“ kubectl port-forward”,否则就不能从Kubernetes外部访问DB。
  4. 创建NodePort服务时,您仍然可以通过pod的主机名“ mysql”访问数据库,但是也可以使用任何节点IP + nodePort访问数据库。因此,如果您的节点的地址为192.168.1.10,而nodePort为30600,则必须将数据库连接到192.168.1.10:30600。