[英]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,並且我嘗試使用host
和curl
解析域。 不幸的是,如果失敗並出現錯誤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/
我想知道您是否看到了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-system
或kubectl 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.