如何解决为什么我的externalName类型服务配置在Kubernetes中不起作用?
我在每个命名空间中创建了两个命名空间和服务:
- 命名空间:应用程序层
- rest-app
- db-service-externalname
- 命名空间:数据层
- db-service
当我尝试从rest-app
连接到DB Service中的MysqL数据库时,出现错误:
MysqL.Data.MysqLClient.MysqLException(0x80004005):无法连接到任何指定的MysqL主机。 ---> System.AggregateException:发生一个或多个错误。 (名称或服务未知)
我已在日志中打印出,它正确地将db-service
作为服务名称,并具有正确的用户/密码。
这是我定义的:
数据库服务
apiVersion: v1
kind: Service
Metadata:
name: db-service
namespace: data-layer
spec:
selector:
app: db-service
ports:
- port: 3306
clusterIP: None
db-service-externalname
apiVersion: v1
kind: Service
Metadata:
name: db-service
namespace: app-layer
spec:
type: ExternalName
externalName: db-service.data-layer.service.cluster.local
ports:
- port: 3306
rest-app
apiVersion: apps/v1
kind: Deployment
Metadata:
name: rest-app
namespace: app-layer
labels:
app: rest-app
spec:
replicas: 1
selector:
matchLabels:
app: rest-app
template:
Metadata:
labels:
app: rest-app
spec:
containers:
- name: rest-app
image: restapp:latest
imagePullPolicy: Always
ports:
- containerPort: 5000
env:
# These are from a secret I defined,and the logs show
# the rest app gets them correctly
- name: MysqL_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: db-credentials
key: db-username
- name: MysqL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: db-password
# I hard-coded this to the externalName I created.
# Is that right?
- name: MysqL_URL
value: db-service
问题:
解决方法
ExternalName类型的服务应如下所示。注意使用svc
而不是service
。
apiVersion: v1
kind: Service
metadata:
name: db-service
namespace: app-layer
spec:
type: ExternalName
externalName: db-service.data-layer.svc.cluster.local
ports:
- port: 3306
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。