微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的externalName类型服务配置在Kubernetes中不起作用?

如何解决为什么我的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?
  • 我需要对它进行不同的定义吗?
  • docker容器中的C#应用​​程序不能引用db-service这是externalName服务的名称吗?

解决方法

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 举报,一经查实,本站将立刻删除。