【发布时间】:2018-09-20 01:15:20
【问题描述】:
我正在尝试将单个数据库实例公开为两个 Kubernetes 命名空间中的服务。在 Ubuntu 16.04.1 上运行的 Kubernetes 版本 1.11.3。数据库服务是可见的并且在默认命名空间中工作。我在一个非默认命名空间中创建了一个 ExternalName 服务,它引用了默认命名空间中的完全限定域名,如下所示:
kind: Service
apiVersion: v1
metadata:
name: ws-mysql
namespace: wittlesouth
spec:
type: ExternalName
externalName: mysql.default.svc.cluster.local
ports:
- port: 3306
服务正在运行:
eric$ kubectl describe service ws-mysql --namespace=wittlesouth
Name: ws-mysql
Namespace: wittlesouth
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ExternalName
IP:
External Name: mysql.default.svc.cluster.local
Port: <unset> 3306/TCP
TargetPort: 3306/TCP
Endpoints: <none>
Session Affinity: None
Events: <none>
如果我检查是否可以从在 wittlesouth 命名空间中运行的 pod 按名称找到该服务,则该服务名称无法解析,但该命名空间中的其他服务(即 Jira)可以:
root@rs-ws-diags-8mgqq:/# nslookup mysql.default.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: mysql.default.svc.cluster.local
Address: 10.99.120.208
root@rs-ws-diags-8mgqq:/# nslookup ws-mysql.wittlesouth
Server: 10.96.0.10
Address: 10.96.0.10#53
*** Can't find ws-mysql.wittlesouth: No answer
root@rs-ws-diags-8mgqq:/# nslookup ws-mysql
Server: 10.96.0.10
Address: 10.96.0.10#53
*** Can't find ws-mysql: No answer
root@rs-ws-diags-8mgqq:/# nslookup ws-mysql.wittlesouth
Server: 10.96.0.10
Address: 10.96.0.10#53
*** Can't find ws-mysql.wittlesouth: No answer
root@rs-ws-diags-8mgqq:/# nslookup ws-mysql.wittlesouth.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
*** Can't find ws-mysql.wittlesouth.svc.cluster.local: No answer
root@rs-ws-diags-8mgqq:/# nslookup ws-mysql.wittlesouth
Server: 10.96.0.10
Address: 10.96.0.10#53
*** Can't find ws-mysql.wittlesouth: No answer
root@rs-ws-diags-8mgqq:/# nslookup jira.wittlesouth
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: jira.wittlesouth.svc.cluster.local
Address: 10.105.30.239
对这里可能出现的问题有什么想法吗?目前我已经通过更新需要使用数据库来引用在默认命名空间中运行的服务的完全限定域名的应用程序来解决它,但我更愿意避免这种情况。我的最终意图是让命名空间有单独的数据库实例,并希望在实际建立第二个实例之前部署配置为以这种方式工作的应用程序。
【问题讨论】:
-
你的 kube-dns 版本是多少?
标签: kubernetes