【问题标题】:How do i provide a mysql instance hosted outside the namespace to a pod that is in the namespace? [duplicate]如何将托管在命名空间之外的 mysql 实例提供给命名空间中的 pod? [复制]
【发布时间】:2019-11-24 03:36:53
【问题描述】:

我需要将托管在命名空间 A 中的 mysql 数据库提供给部署在命名空间“B”中的应用程序。

到目前为止,我已经尝试了几种方法,其中最有希望的是使用 Endpoint 和服务的组合,如下所示:

kind: Service
apiVersion: v1
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
      targetPort: 31234
---
kind: Endpoints
apiVersion: v1
metadata:
  name: mysql
subsets:
  - addresses:
      - ip: 12.34.567.8
    ports:
      - port: 31234

虽然 mysql 容器的一个实例已经在命名空间“A”中分离出来,并通过 NodePort 配置在 31234 处公开。

应用程序有一个初始化容器 init-mysql,它使用主机名“mysql”和正确的凭据 ping mysql 实例。 我希望应用程序能像往常一样启动,但它卡在了 pod 初始化状态。 当我尝试检查 init-mysql 的日志时,我只得到以下内容:

Warning: Using a password on the command line interface can be insecure.

用于 initContainer 'init-mysql' 的命令是:

          command:
            - sh
            - -c
            - 'mysqladmin ping -hmysql -P3306 -uusername -ppassword'

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    有人问过这个问题here

    为了提高知名度,我发布了 Paul(社区 wiki)接受的答案:

    我偶然发现了同样的问题并找到了一个不错的解决方案 不需要任何静态ip配置:

    您可以通过DNS name 访问服务(正如您所提到的): servicename.namespace.svc.cluster.local

    您可以使用该 DNS 名称在 another namespace via a local service 中引用它:

    kind: Service
    apiVersion: v1
    metadata:
      name: service-y
      namespace: namespace-a
    spec:
      type: ExternalName
      externalName: service-x.namespace-b.svc.cluster.local
      ports:
      - port: 80
    

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      相关资源
      最近更新 更多