Почему моя конфигурация службы типа externalName не работает в Kubernetes?
Я создал два пространства имен и службы в каждом пространстве имен:
- Пространство имен: слой приложения
- отдых-приложение
- db-service-externalname
- Пространство имен: уровень данных
- db-сервис
Когда я пытаюсь подключиться к базе данных MySQL в службе БД из
rest-app
, Я получаю сообщение об ошибке:
MySql.Data.MySqlClient.MySqlException (0x80004005): невозможно подключиться к любому из указанных хостов MySQL. ---> System.AggregateException: произошла одна или несколько ошибок. (Название или услуга неизвестны)
Я распечатал в журналах, и он правильно
db-service
в качестве имени службы и имеет право пользователя / пароль.
Вот что я определил:
db-сервис
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
отдых-приложение
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 в пространстве имен уровня приложения?
- Нужно ли мне определять это иначе?
- Может ли приложение C# в контейнере докера не ссылаться на
db-service
какое имя у службы externalName?
1 ответ
Решение
Служба типа 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