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

标签 mysql docker kubernetes kubernetes-networking kubernetes-namespace

我在每个 namespace 中创建了两个 namespace 和服务:

  • 命名空间:应用程序层
  • rest-app
  • 数据库服务外部名称

  • 命名空间:数据层
  • 数据库服务


  • 当我尝试从rest-app连接到DB Service中的MySQL数据库时,出现错误:

    MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts. ---> System.AggregateException: One or more errors occurred. (Name or service not known)


    我在日志中打印了出来,它正确地将db-service作为服务名称,并且具有正确的用户/密码。
    这是我定义的:
    数据库服务
    apiVersion: v1
    kind: Service
    metadata:
      name: db-service
      namespace: data-layer
    spec:
      selector:
        app: db-service
      ports:
       - port: 3306
      clusterIP: None
    
    数据库服务外部名称
    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
    
    问题:
  • 我是否正确在应用层 namespace 中创建了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
    

    关于mysql - 为什么我的externalName类型服务配置在Kubernetes中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64013958/

    相关文章:

    PHP 函数在尝试在 HTML 上显示时出现异常

    python-3.x - dockerizing 期间无法在 alpine 上安装 pycosat

    postgresql - 将 PostgreSQL 安装到 asp.net core 容器中

    ssl - HTTPS 连接被拒绝,使用 ingress-nginx

    mysql - c9.io - 如何在 node.js 平台中找到主机地址以建立 mysql 连接

    mysql - 查找存储在特定列中的文本的大小

    docker - 如何将我的Docker IP转发到网络的其余部分?

    kubernetes - 如何从 Pod 中的容器内部获知 Pod 自己的 IP 地址?

    oauth-2.0 - 是否有通过 Kubernetes 集群提供 OAUTH2 安全性的最佳实践标准?

    php - 如何使用 Laravel 框架更新 MySQL 中的 json 数据?