KubernetesExternalName服务在DNS中不可见

2024-04-15

我正在尝试将单个数据库实例公开为两个 Kubernetes 命名空间中的服务。 Kubernetes 版本 1.11.3 在 Ubuntu 16.04.1 上运行。数据库服务是可见的并且在默认命名空间中工作。我在非默认命名空间中创建了一个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

对这里可能出现的问题有什么想法吗?目前,我已经通过更新需要使用数据库来引用在默认命名空间中运行的服务的完全限定域名的应用程序来解决这个问题,但我宁愿避免这种情况。我的最终目的是让命名空间拥有单独的数据库实例,并且希望在实际建立第二个实例之前部署配置为以这种方式工作的应用程序。


对于带有 coredns 和 calico 的 Kubernetes 1.11.2,这对我不起作用。仅当您直接在外部服务运行的命名空间中引用外部服务时,它才有效:

$ kubectl get pods -n default
NAME      READY     STATUS    RESTARTS   AGE
mysql-0   2/2       Running   0          17m
mysql-1   2/2       Running   0          16m

$ kubectl get pods -n wittlesouth
NAME              READY     STATUS    RESTARTS   AGE
ricos-dummy-pod   1/1       Running   0          14s

kubectl exec -it ricos-dummy-pod -n wittlesouth bash
root@ricos-dummy-pod:/# ping mysql.default.svc.cluster.local
PING mysql.default.svc.cluster.local (192.168.1.40): 56 data bytes
64 bytes from 192.168.1.40: icmp_seq=0 ttl=62 time=0.578 ms
64 bytes from 192.168.1.40: icmp_seq=1 ttl=62 time=0.632 ms
64 bytes from 192.168.1.40: icmp_seq=2 ttl=62 time=0.628 ms
^C--- mysql.default.svc.cluster.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.578/0.613/0.632/0.025 ms
root@ricos-dummy-pod:/# ping ws-mysql
ping: unknown host
root@ricos-dummy-pod:/# exit

$ kubectl get svc mysql
NAME      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
mysql     ClusterIP   None         <none>        3306/TCP   45d

$ kubectl describe svc mysql
Name:              mysql
Namespace:         default
Labels:            app=mysql
Annotations:       <none>
Selector:          app=mysql
Type:              ClusterIP
IP:                None
Port:              mysql  3306/TCP
TargetPort:        3306/TCP
Endpoints:         192.168.1.40:3306,192.168.2.25:3306
Session Affinity:  None
Events:            <none>

仅根据 kube-dns 支持ExternalName服务功能docs https://coredns.io/plugins/kubernetes/Kubernetes 1.11.x 默认为 coredns。您可能想尝试从 coredns 更改为 kube-dns 或者可能更改configs https://coredns.io/plugins/kubernetes/用于您的 coredns 部署。我希望在某个时候可以使用 coredns 来实现这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KubernetesExternalName服务在DNS中不可见 的相关文章

随机推荐