【问题标题】:How can I connect to my mysql pod or node of mysql in k8s?如何在 k8s 中连接到我的 mysql pod 或 mysql 节点?
【发布时间】:2019-09-27 21:48:43
【问题描述】:

我将一个 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


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

问题4:当我使用方式 1 部署它时。如何从 pods 和我的 localMachine 访问我的 mysql 服务器。

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

【问题讨论】:

    标签: mysql go kubernetes


    【解决方案1】:
    1. Pod 监听端口,服务代理端口。
    2. Pod 监听端口 3306,Service 仅代理端口 3306 到 Pod。服务不监听端口,只是简单的 iptables 规则。
    3. 当您创建默认 ClusterIP 服务时,您可以通过 pod 中的主机名“mysql”访问您的数据库。除非您执行“kubectl port-forward”,否则您无法从 Kubernetes 外部访问 DB。
    4. 当你创建 NodePort 服务时,你仍然可以通过主机名“mysql”从 Pod 访问你的 DB,也可以使用任何节点 IP + nodePort 访问 DB。因此,如果您的节点的地址为 192.168.1.10 并且您的 nodePort 为 30600,那么您必须将 DB 连接到 192.168.1.10:30600。

    【讨论】:

    • 小附录:如果 Pod 位于同一个命名空间中,它们可以通过短名称相互访问。
    猜你喜欢
    • 2020-07-12
    • 2021-01-29
    • 1970-01-01
    • 2021-11-27
    • 2020-05-16
    • 2021-02-20
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    相关资源
    最近更新 更多