簡體   English   中英

Kube.netes 服務的別名

[英]Alias for Kubernetes service

我有運行 Kube.netes 版本 1.18.2 的 Minikube。 Minikube 也在運行標准的 CoreDNS。 我需要為我的服務 coolservice 引入一個 DNS 別名。 該服務在標准 coolservice、coolservice.default 和 coolservice.default.svc.cluster.local DNS 名稱下可用。 我希望我的服務也可以在域 coolservice.foo.bar 下使用。

為此,我正在嘗試使用 DNS 重寫插件。 這是我的核心文件配置:

apiVersion: v1
data:
  Corefile: |
    .:53 {
      [... unchanged ...]
    }
    foo.bar {
      rewrite name exact coolservice.foo.bar coolservice.default.svc.cluster.local
    }
kind: ConfigMap
metadata:
  [... unchanged ...]

在我使用 kubectl 應用 Corefile 之后,我在另一個 pod 中聲明 shell,並且我嘗試使用hostcurl解析域。 不幸的是,如果失敗並出現錯誤Question section mismatch

root@aks-ssh:/# host coolservice.default.svc.cluster.local
coolservice.default.svc.cluster.local has address 10.108.195.164

root@aks-ssh:/# host coolservice.foo.bar
;; Question section mismatch: got coolservice.default.svc.cluster.local/A/IN
 
;; Question section mismatch: got coolservice.default.svc.cluster.local/A/IN
;; connection timed out; no servers could be reached

root@aks-ssh:/# curl -X GET coolservice.default.svc.cluster.local:8100/health
{"results":[],"compositeStatus":"Healthy"}

root@aks-ssh:/# curl -X GET coolservice.foo.bar:8100/health
curl: (6) Could not resolve host: coolservice.foo.bar

在此文檔部分中寫道,當使用exact名稱重寫規則時,答案會自動重寫。 我也嘗試過正則表達式規則。 知道這里有什么問題嗎? (我也嘗試在 AKS 集群上配置它,同樣的問題。)。

看看: https://github.com/coredns/coredns/issues/2347

似乎配置 Resonse Rewrite 很重要

請參閱文檔中有關響應重寫的部分https://coredns.io/plugins/rewrite/

與此相同: CoreDNS 后綴重寫導致 DNS 查詢返回重寫后的名稱

我想知道您是否看到了Kube.netes 的自定義 DNS 條目一文。 它還使用rewrite插件。

假設我們有一個服務 foo.default.svc.cluster.local 可以作為 foo.example.com 供外部客戶端使用。 也就是說,當在集群外部查找時,foo.example.com 將解析為負載均衡器 VIP - 服務的外部 IP 地址。 在集群內部,它將解析為相同的東西,因此在內部使用此名稱將導致流量發夾 - 從集群傳出,然后通過外部 IP 返回。相反,我們希望它解析為內部 ClusterIP,避免發夾。

在您的配置中,您添加了帶括號的 foo.bar。

foo.bar {
      rewrite name exact coolservice.foo.bar coolservice.default.svc.cluster.local
    }

您是否嘗試過不這樣做? 根據提到的文檔中的示例:

.:53 {
    errors
    log
    health
    rewrite name foo.example.com foo.default.svc.cluster.local
    kubernetes cluster.local 10.0.0.0/24
    proxy . /etc/resolv.conf
    cache 30
}

雖然在你的情況下是

.:53 {
    errors
    log
    health
    rewrite name coolservice.foo.bar coolservice.default.svc.cluster.local
    kubernetes cluster.local 10.0.0.0/24
    proxy . /etc/resolv.conf
    cache 30
}

由於您提供的信息有限,請確保您使用的是正確的service名稱和namespace名稱。

這些更改可以使用命令kubectl edit configmap coredns -n kube-systemkubectl apply -f patched-coredns-deployment.yaml -n kube-system

之后您將需要幾分鍾(10-15 分鍾)來重新加載插件。

您也可以按照文章強制執行

一旦我們通過 kubectl edit 或 kubectl apply 將其添加到 ConfigMap 中,我們必須讓 CoreDNS 知道 Corefile 已更改。 您可以向它發送 SIGUSR1 以告訴它優雅地重新加載——也就是說,不會丟失服務:

$ kubectl exec -n kube-system <coredns-pod-name> -- kill -SIGUSR1 1

最后,您可以通過以下方式對其進行測試(將名稱更改為您自己的名稱):

$ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
If you don't see a command prompt, try pressing enter.
/ # host foo
foo.default.svc.cluster.local has address 10.0.0.72
/ # host foo.example.com
foo.example.com has address 10.0.0.72
/ # host bar.example.com
Host bar.example.com not found: 3(NXDOMAIN)
/ #

請讓我知道你的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM