我需要将命名空间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'
答案 0 :(得分:0)
有人问这个问题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