2016-11-14 33 views
1

我有一個在AWS中運行的Kubernetes v1.4集羣,具有自動擴展節點。 我也有一個蒙戈副本集簇只有SSL的連接(FQDN通用名)和公共DNS條目:創建特定的記錄條目到Kubernetes本地DNS

  • node1.mongo.example.com - > 1.1.1.1
  • node2.mongo。 example.com - > 1.1.1.2
  • node3.mongo.example.com - > 1.1.1.3

的Kubernetes節點是一個安全組,允許訪問所述蒙戈羣集的一部分,而是僅經由它們的私人IP。

當公共FQDN被查詢時,是否有方法在Kubernetes DNS中使用私有IP創建A記錄?

我想的第一件事是一個腳本& ConfigMap組合更新/ etc /在啓動時的主機(參見Is it a way to add arbitrary record to kube-dns?),但是這是有問題的其他Kubernetes服務還可以更新主機在不同的時間文件。

我也嘗試了服務& Enpoints配置:

--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: node1.mongo.example.com 
spec: 
    ports: 
    - protocol: TCP 
     port: 27017 
     targetPort: 27017 
--- 
apiVersion: v1 
kind: Endpoints 
metadata: 
    name: node1.mongo.example.com 
subsets: 
    - addresses: 
     - ip: 192.168.0.1 
    ports: 
     - port: 27017 

不過雖然不那麼明顯,首先,該解決方案是非常簡單的失敗作爲服務名稱不能是FQDN ......

+0

你有沒有想過使用mongo實例AWS公共DNS(公共主機名)?當從ec2實例調用時,它重定向到專用IP:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-ip-addressing.html#vpc-public-ip-addresses –

回答

5

。最近版本中的kube-dns映像包含dnsmasq作爲其組件之一。如果你看看它的手冊頁,你會看到一些有用的選項。以下是演講,你可以選擇一個類似的路徑:

創建一個ConfigMap來存儲您的DNS映射:

apiVersion: v1 
kind: ConfigMap 
metadata: 
    name: kube-dns 
    namespace: kube-system 
data: 
    myhosts: | 
    10.0.0.1 foo.bar.baz 

有了這樣的ConfigMap集羣中的應用,你現在可以做一些改變你使用kube-dns-vXX部署在你的kubernetes。

定義卷,將暴露你的CM到dnsmasq

volumes: 
    - name: hosts 
    configMap: 
     name: kube-dns 

,並安裝在你的kube-dns部署/ RC模板dnsmasq容器

volumeMounts: 
    - name: hosts 
     mountPath: /etc/hosts.d 

最後,添加一個小的配置標誌,以您的dnsmasq參數:

args: 
    - --hostsdir=/etc/hosts.d 

現在,當您將這些更改應用於羣集中的kube-dns-vXX部署時,它將掛載configmap並使用掛載在/etc/hosts.d/中的文件(具有典型主機文件格式)作爲dnsmasq的知識來源。因此,如果您現在在您的容器中查詢foo.bar.baz,它們將解析爲相應的IP。這些條目優先於公共DNS,因此它應該完全適合您的情況。

請注意dnsmasq不在監視ConfigMap中的更改,因此如果更改它必須手動重新啓動。

幾分鐘前在一個活動羣集上進行了測試和驗證。