欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳細(xì)聊聊K8s容器內(nèi)nginx帶變量的域名解析

 更新時(shí)間:2022年01月24日 09:13:07   投稿:daisy  
這篇文章主要給大家介紹了關(guān)于K8s容器內(nèi)nginx帶變量域名的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

如果 nginx 的 proxy_pass 指令帶有變量名的話:

server {
	server_name ~^(\w+)\.example\.com$;
	location / {
		proxy_pass http://svc-$1;
	}
}

不配置 resolver 是不能使用的(雖然可以成功加載配置):

$ curl --resolve 'a.example.com:80:127.0.0.1' a.example.com
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.14.2</center>
</body>
</html>

nginx 的錯(cuò)誤日志:

[error] 615#615: *1 no resolver defined to resolve svc-a

查看當(dāng)前的 resolve 配置:

$ cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.152.183.10
options ndots:5

嘗試把它添加到 nginx 的配置里面:

server {
	server_name ~^(\w+)\.example\.com$;
	location / {
		resolver 10.152.183.10;
		proxy_pass http://svc-$1;
	}
}

結(jié)果是仍然不能可用:

[error] 3817#3817: *10 svc-a could not be resolved (3: Host not found)

nginx 要求配置 resolver 指令,那么可以猜測,它沒有使用系統(tǒng)的 resolve.conf 文件,也就是:不走系統(tǒng)那一套來解析域名。 所以現(xiàn)在的差異就在于下面 search 這一行了:

search default.svc.cluster.local svc.cluster.local cluster.local

search 指令的用途:當(dāng)名字無法解析時(shí),加上這些后綴再嘗試解析。

根據(jù) K8s 的 Service 的 DNS 文章所言可以推測:

  • cluster.local 是 K8s 的 cluster_domain
  • default.svc.cluster.local 是名字空間的域名( default 是我的名字空間)

而服務(wù)的域名則是:<服務(wù)>.<名字空間域名>。

所以當(dāng)我 curl svc-a 的時(shí)候,實(shí)際上返回的是 svc-a.default.svc.cluster.local 的結(jié)果:

$ host svc-a
svc-a.default.svc.cluster.local has address 10.152.183.160

$ host svc-a.default
svc-a.default.svc.cluster.local has address 10.152.183.160

$ host svc-a.default.svc
svc-a.default.svc.cluster.local has address 10.152.183.160

$ host svc-a.default.svc.cluster.local
svc-a.default.svc.cluster.local has address 10.152.183.160

看出來了嗎?以上命令省略的恰好是 search 指令列出來的部分。

但是,nginx 的 resolver 不支持 search,所以應(yīng)該寫完整的域名。

server {
	server_name ~^(\w+)\.example\.com$;
	location / {
		resolver 10.152.183.10;
		proxy_pass http://svc-$1.default.svc.cluster.local;
	}
}

以上這樣配置就沒有問題了。 但是,hardcode 了一個(gè) resolver,不好,得去掉,用服務(wù)名的方式找到 K8s DNS 的域名。 我的 K8s 的域名是 kube-dns 服務(wù)提供的,名字空間是 kube-system,所以完整的 resolver 是: kube-dns.kube-system.svc.cluster.local。

$ host kube-dns.kube-system.svc.cluster.local
kube-dns.kube-system.svc.cluster.local has address 10.152.183.10

最終的 nginx 配置:

server {
	server_name ~^(\w+)\.example\.com$;
	location / {
		resolver kube-dns.kube-system.svc.cluster.local;
		proxy_pass http://svc-$1.default.svc.cluster.local;
	}
}

其中的變量,應(yīng)該按你的場景來修改:

  • kube-dns 是我的集群使用的 DNS 服務(wù)

  • kube-system 是我的 DNS 服務(wù)所在的名字空間

  • default 是我的名字空間

  • cluster.local 是集群域名(cluster_domain)

    有至少兩種方式可以拿到這個(gè)集群域名:

    • /etc/resolv.conf 文件的 search 指令。

    • 這是 kubelet 的一個(gè)啟動參數(shù),可以找到你的集群啟動參數(shù)來獲取到。 我這里用的是 microk8s 搭建的測試集群,其中就有一個(gè)集群域名參數(shù)的值。

      $ ps aux|grep kubelet
      root      728595 16.0 11.1 3549776 872556 ?      Ssl  02:25   9:44 /snap/microk8s/2870/kubelite --scheduler-args-file=/var/snap/microk8s/2870/args/kube-scheduler --controller-manager-args-file=/var/snap/microk8s/2870/args/kube-controller-manager --proxy-args-file=/var/snap/microk8s/2870/args/kube-proxy --kubelet-args-file=/var/snap/microk8s/2870/args/kubelet --apiserver-args-file=/var/snap/microk8s/2870/args/kube-apiserver --kubeconfig-file=/var/snap/microk8s/2870/credentials/client.config --start-control-plane=true
      
      $ cat /var/snap/microk8s/2870/args/kubelet
      ...
      --cluster-domain=cluster.local
      ...
      

    由于集群域名不是變化的量,所以每次從文件里面讀取并無必要(第一種方式),所以推薦第二種。

總結(jié) 

到此這篇關(guān)于K8s容器內(nèi)nginx帶變量域名解析的文章就介紹到這了,更多相關(guān)K8s容器內(nèi)nginx域名解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx反向代理學(xué)習(xí)實(shí)例教程

    Nginx反向代理學(xué)習(xí)實(shí)例教程

    nginx作為web服務(wù)器一個(gè)重要的功能就是反向代理,當(dāng)然你也可以使用nginx配置正向代理,這篇文章主要給大家介紹了關(guān)于Nginx反向代理的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • linux下Nginx+Tomcat負(fù)載均衡配置方法

    linux下Nginx+Tomcat負(fù)載均衡配置方法

    這篇文章主要介紹了linux下Nginx+Tomcat負(fù)載均衡配置方法,需要的朋友可以參考下
    2016-09-09
  • 詳解nginx反向代理配置及優(yōu)化

    詳解nginx反向代理配置及優(yōu)化

    本篇文章主要介紹了詳解nginx反向代理配置及優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 解決Nginx 配置 proxy_pass 后 返回404問題

    解決Nginx 配置 proxy_pass 后 返回404問題

    這篇文章主要介紹了Nginx 配置 proxy_pass 后 返回404問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 如何配置nginx作為靜態(tài)文件托管服務(wù)器

    如何配置nginx作為靜態(tài)文件托管服務(wù)器

    這篇文章主要介紹了如何配置nginx作為靜態(tài)文件托管服務(wù)器的相關(guān)資料,下載nginx在windows上是個(gè)壓縮包,解壓后,使用命令行輸入nginx進(jìn)行啟動,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Node.js站點(diǎn)使用Nginx作反向代理時(shí)配置GZip壓縮的教程

    Node.js站點(diǎn)使用Nginx作反向代理時(shí)配置GZip壓縮的教程

    這篇文章主要介紹了Node.js站點(diǎn)使用Nginx作反向代理時(shí)配置GZip壓縮的教程,文中演示了Node使用Express框架時(shí)的HTTP傳輸壓縮配置,需要的朋友可以參考下
    2016-04-04
  • nginx中使用lua腳本的方法

    nginx中使用lua腳本的方法

    這篇文章主要介紹了nginx中使用lua腳本的方法,本文介紹通過第三方模塊lua-nginx-module實(shí)現(xiàn)lua腳本在nginx的調(diào)用,并附一個(gè)配置例子,需要的朋友可以參考下
    2014-07-07
  • nginx中斜杠(‘/‘)的具體使用

    nginx中斜杠(‘/‘)的具體使用

    在Nginx配置的過程中,斜杠(/)經(jīng)常使用到,它們不僅可以區(qū)分不同的路徑,還有其他的作用,本文就詳細(xì)的介紹了nginx中斜杠(‘/‘)的具體使用,感興趣的可以了解一下,感興趣的可以了解一下
    2023-10-10
  • 如何使用Nginx解決跨域問題詳解

    如何使用Nginx解決跨域問題詳解

    本地運(yùn)行一個(gè)項(xiàng)目,但是要訪問外域的api接口,存在跨域問題,下面這篇文章主要給大家介紹了關(guān)于如何使用Nginx解決跨域問題的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 在nginx中使用geoip做區(qū)域限制的方法

    在nginx中使用geoip做區(qū)域限制的方法

    今天小編就為大家分享一篇在nginx中使用geoip做區(qū)域限制的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論