【问题标题】:Why is my externalName type service configuration not working in Kubernetes?为什么我的 externalName 类型的服务配置在 Kubernetes 中不起作用?
【发布时间】:2020-09-22 16:30:22
【问题描述】:

我在每个命名空间中创建了两个命名空间和服务:

  • 命名空间:应用层
    • 休息应用
    • db-service-externalname
  • 命名空间:数据层
    • 数据库服务

当我尝试从rest-app 连接到 DB 服务中的 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

休息应用

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 服务的名称吗?

【问题讨论】:

    标签: mysql docker kubernetes kubernetes-networking kubernetes-namespace


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2018-07-19
      相关资源
      最近更新 更多