国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

詳解 DNS 與 CoreDNS 的實現(xiàn)原理

共 15855字,需瀏覽 32分鐘

 ·

2020-09-18 14:46

域名系統(tǒng)(Domain Name System)是整個互聯(lián)網(wǎng)的電話簿,它能夠?qū)⒖杀蝗死斫獾挠蛎g成可被機器理解 IP 地址,使得互聯(lián)網(wǎng)的使用者不再需要直接接觸很難閱讀和理解的 IP 地址。


我們在這篇文章中的第一部分會介紹 DNS 的工作原理以及一些常見的 DNS 問題,而第二部分我們會介紹 DNS 服務(wù)?CoreDNS?的架構(gòu)和實現(xiàn)原理。

DNS

域名系統(tǒng)在現(xiàn)在的互聯(lián)網(wǎng)中非常重要,因為服務(wù)器的 IP 地址可能會經(jīng)常變動,如果沒有了 DNS,那么可能 IP 地址一旦發(fā)生了更改,當前服務(wù)器的客戶端就沒有辦法連接到目標的服務(wù)器了,如果我們?yōu)?IP 地址提供一個『別名』并在其發(fā)生變動時修改別名和 IP 地址的關(guān)系,那么我們就可以保證集群對外提供的服務(wù)能夠相對穩(wěn)定地被其他客戶端訪問。

DNS 其實就是一個分布式的樹狀命名系統(tǒng),它就像一個去中心化的分布式數(shù)據(jù)庫,存儲著從域名到 IP 地址的映射。

工作原理

在我們對 DNS 有了簡單的了解之后,接下來我們就可以進入 DNS 工作原理的部分了,作為用戶訪問互聯(lián)網(wǎng)的第一站,當一臺主機想要通過域名訪問某個服務(wù)的內(nèi)容時,需要先通過當前域名獲取對應(yīng)的 IP 地址。這時就需要通過一個 DNS 解析器負責域名的解析,下面的圖片展示了 DNS 查詢的執(zhí)行過程:

dns-resolution

  1. 本地的 DNS 客戶端向 DNS 解析器發(fā)出解析 draveness.me 域名的請求;

  2. DNS 解析器首先會向就近的根 DNS 服務(wù)器?.?請求頂級域名 DNS 服務(wù)的地址;

  3. 拿到頂級域名 DNS 服務(wù)?me.?的地址之后會向頂級域名服務(wù)請求負責?dravenss.me.域名解析的命名服務(wù);

  4. 得到授權(quán)的 DNS 命名服務(wù)時,就可以根據(jù)請求的具體的主機記錄直接向該服務(wù)請求域名對應(yīng)的 IP 地址;

DNS 客戶端接受到 IP 地址之后,整個 DNS 解析的過程就結(jié)束了,客戶端接下來就會通過當前的 IP 地址直接向服務(wù)器發(fā)送請求。

對于 DNS 解析器,這里使用的 DNS 查詢方式是迭代查詢,每個 DNS 服務(wù)并不會直接返回 DNS 信息,而是會返回另一臺 DNS 服務(wù)器的位置,由客戶端依次詢問不同級別的 DNS 服務(wù)直到查詢得到了預(yù)期的結(jié)果;另一種查詢方式叫做遞歸查詢,也就是 DNS 服務(wù)器收到客戶端的請求之后會直接返回準確的結(jié)果,如果當前服務(wù)器沒有存儲 DNS 信息,就會訪問其他的服務(wù)器并將結(jié)果返回給客戶端。

域名層級

域名層級是一個層級的樹形結(jié)構(gòu),樹的最頂層是根域名,一般使用?.?來表示,這篇文章所在的域名一般寫作?draveness.me,但是這里的寫法其實省略了最后的?.,也就是全稱域名(FQDN)dravenss.me.。

dns-namespace

根域名下面的就是?com、net?和?me?等頂級域名以及次級域名?draveness.me,我們一般在各個域名網(wǎng)站中購買和使用的都是次級域名、子域名和主機名了。

域名服務(wù)器

既然域名的命名空間是樹形的,那么用于處理域名解析的 DNS 服務(wù)器也是樹形的,只是在樹的組織和每一層的職責上有一些不同。DNS 解析器從根域名服務(wù)器查找到頂級域名服務(wù)器的 IP 地址,又從頂級域名服務(wù)器查找到權(quán)威域名服務(wù)器的 IP 地址,最終從權(quán)威域名服務(wù)器查出了對應(yīng)服務(wù)的 IP 地址。

$?dig?-t?A?draveness.me?+trace

我們可以使用 dig 命令追蹤?draveness.me?域名對應(yīng) IP 地址是如何被解析出來的,首先會向預(yù)置的 13 組根域名服務(wù)器發(fā)出請求獲取頂級域名的地址:

.????????????56335???IN??NS??m.root-servers.net.
.????????????56335???IN??NS??b.root-servers.net.
.????????????56335???IN??NS??c.root-servers.net.
.????????????56335???IN??NS??d.root-servers.net.
.????????????56335???IN??NS??e.root-servers.net.
.????????????56335???IN??NS??f.root-servers.net.
.????????????56335???IN??NS??g.root-servers.net.
.????????????56335???IN??NS??h.root-servers.net.
.????????????56335???IN??NS??i.root-servers.net.
.????????????56335???IN??NS??a.root-servers.net.
.????????????56335???IN??NS??j.root-servers.net.
.????????????56335???IN??NS??k.root-servers.net.
.????????????56335???IN??NS??l.root-servers.net.
.????????????56335???IN??RRSIG???NS?8?0?518400?20181111050000?20181029040000?2134?.?G4NbgLqsAyin2zZFetV6YhBVVI29Xi3kwikHSSmrgkX+lq3sRgp3UuQ3?JQxpJ+bZY7mwzo3NxZWy4pqdJDJ55s92l+SKRt/ruBv2BCnk9CcnIzK+?OuGheC9/Coz/r/33rpV63CzssMTIAAMQBGHUyFvRSkiKJWFVOps7u3TM?jcQR0Xp+rJSPxA7f4+tDPYohruYm0nVXGdWhO1CSadXPvmWs1xeeIKvb?9sXJ5hReLw6Vs6ZVomq4tbPrN1zycAbZ2tn/RxGSCHMNIeIROQ99kO5N?QL9XgjIJGmNVDDYi4OF1+ki48UyYkFocEZnaUAor0pD3Dtpis37MASBQ?fr6zqQ==
;;?Received?525?bytes?from?8.8.8.8#53(8.8.8.8)?in?247?ms

根域名服務(wù)器是 DNS 中最高級別的域名服務(wù)器,這些服務(wù)器負責返回頂級域的權(quán)威域名服務(wù)器地址,這些域名服務(wù)器的數(shù)量總共有 13 組,域名的格式從上面返回的結(jié)果可以看到是?.root-servers.net,每個根域名服務(wù)器中只存儲了頂級域服務(wù)器的 IP 地址,大小其實也只有 2MB 左右,雖然域名服務(wù)器總共只有 13 組,但是每一組服務(wù)器都通過提供了鏡像服務(wù),全球大概也有幾百臺的根域名服務(wù)器在運行。

在這里,我們獲取到了以下的 5 條 NS 記錄,也就是 5 臺?me.?定義域名 DNS 服務(wù)器:

me.????????????172800??IN??NS??b0.nic.me.
me.????????????172800??IN??NS??a2.nic.me.
me.????????????172800??IN??NS??b2.nic.me.
me.????????????172800??IN??NS??a0.nic.me.
me.????????????172800??IN??NS??c0.nic.me.
me.????????????86400???IN??DS??2569?7?1?09BA1EB4D20402620881FD9848994417800DB26A
me.????????????86400???IN??DS??2569?7?2?94E798106F033500E67567B197AE9132C0E916764DC743C55A9ECA3C?7BF559E2
me.????????????86400???IN??RRSIG???DS?8?1?86400?20181113050000?20181031040000?2134?.?O81bud61Qh+kJJ26XHzUOtKWRPN0GHoVDacDZ+pIvvD6ef0+HQpyT5nV?rhEZXaFwf0YFo08PUzX8g5Pad8bpFj0O//Q5H2awGbjeoJnlMqbwp6Kl?7O9zzp1YCKmB+ARQgEb7koSCogC9pU7E8Kw/o0NnTKzVFmLq0LLQJGGE?Y43ay3Ew6hzpG69lP8dmBHot3TbF8oFrlUzrm5nojE8W5QVTk1QQfrZM?90WBjfe5nm9b4BHLT48unpK3BaqUFPjqYQV19C3xJ32at4OwUyxZuQsa?GWl0w9R5TiCTS5Ieupu+Q9fLZbW5ZMEgVSt8tNKtjYafBKsFox3cSJRn?irGOmg==
;;?Received?721?bytes?from?192.36.148.17#53(i.root-servers.net)?in?59?ms

當 DNS 解析器從根域名服務(wù)器中查詢到了頂級域名?.me?服務(wù)器的地址之后,就可以訪問這些頂級域名服務(wù)器其中的一臺?b2.nic.me?獲取權(quán)威 DNS 的服務(wù)器的地址了:

draveness.me.????????86400???IN??NS??f1g1ns1.dnspod.net.
draveness.me.????????86400???IN??NS??f1g1ns2.dnspod.net.
fsip6fkr2u8cf2kkg7scot4glihao6s1.me.?8400?IN?NSEC3?1?1?1?D399EAAB?FSJJ1I3A2LHPTHN80MA6Q7J64B15AO5K??NS?SOA?RRSIG?DNSKEY?NSEC3PARAM
fsip6fkr2u8cf2kkg7scot4glihao6s1.me.?8400?IN?RRSIG?NSEC3?7?2?8400?20181121151954?20181031141954?2208?me.?eac6+fEuQ6gK70KExV0EdUKnWeqPrzjqGiplqMDPNRpIRD1vkpX7Zd6C?oN+c8b2yLoI3s3oLEoUd0bUi3dhyCrxF5n6Ap+sKtEv4zZ7o7CEz5Fw+?fpXHj7VeL+pI8KffXcgtYQGlPlCM/ylGUGYOcExrB/qPQ6f/62xrPWjb?+r4=
qcolpi5mj0866sefv2jgp4jnbtfrehej.me.?8400?IN?NSEC3?1?1?1?D399EAAB?QD4QM6388QN4UMH78D429R72J1NR0U07??NS?DS?RRSIG
qcolpi5mj0866sefv2jgp4jnbtfrehej.me.?8400?IN?RRSIG?NSEC3?7?2?8400?20181115151844?20181025141844?2208?me.?rPGaTz/LyNRVN3LQL3LO1udby0vy/MhuIvSjNfrNnLaKARsbQwpq2pA9?+jyt4ah8fvxRkGg9aciG1XSt/EVIgdLSKXqE82hB49ZgYDACX6onscgz?naQGaCAbUTSGG385MuyxCGvqJdE9kEZBbCG8iZhcxSuvBksG4msWuo3k?dTg=
;;?Received?586?bytes?from?199.249.127.1#53(b2.nic.me)?in?267?ms

這里的權(quán)威 DNS 服務(wù)是作者在域名提供商進行配置的,當有客戶端請求?draveness.me?域名對應(yīng)的 IP 地址時,其實會從作者使用的 DNS 服務(wù)商 DNSPod 處請求服務(wù)的 IP 地址:

draveness.me.????????600?IN??A???123.56.94.228
draveness.me.????????86400???IN??NS??f1g1ns2.dnspod.net.
draveness.me.????????86400???IN??NS??f1g1ns1.dnspod.net.
;;?Received?123?bytes?from?58.247.212.36#53(f1g1ns1.dnspod.net)?in?28?ms

最終,DNS 解析器從?f1g1ns1.dnspod.net?服務(wù)中獲取了當前博客的 IP 地址?123.56.94.228,瀏覽器或者其他設(shè)備就能夠通過 IP 向服務(wù)器獲取請求的內(nèi)容了。

從整個解析過程,我們可以看出 DNS 域名服務(wù)器大體分成三類,根域名服務(wù)、頂級域名服務(wù)以及權(quán)威域名服務(wù)三種,獲取域名對應(yīng)的 IP 地址時,也會像遍歷一棵樹一樣按照從頂層到底層的順序依次請求不同的服務(wù)器。

膠水記錄

在通過服務(wù)器解析域名的過程中,我們看到當請求?me.?頂級域名服務(wù)器的時候,其實返回了?b0.nic.me?等域名:

me.????????????172800??IN??NS??b0.nic.me.
me.????????????172800??IN??NS??a2.nic.me.
me.????????????172800??IN??NS??b2.nic.me.
me.????????????172800??IN??NS??a0.nic.me.
me.????????????172800??IN??NS??c0.nic.me.
...

就像我們最開始說的,在互聯(lián)網(wǎng)中想要請求服務(wù),最終一定需要獲取 IP 提供服務(wù)的服務(wù)器的 IP 地址;同理,作為?b0.nic.me?作為一個 DNS 服務(wù)器,我也必須獲取它的 IP 地址才能獲得次級域名的 DNS 信息,但是這里就陷入了一種循環(huán):

  1. 如果想要獲取?dravenss.me?的 IP 地址,就需要訪問?me?頂級域名服務(wù)器?b0.nic.me

  2. 如果想要獲取?b0.nic.me?的 IP 地址,就需要訪問?me?頂級域名服務(wù)器?b0.nic.me

  3. 如果想要獲取?b0.nic.me?的 IP 地址,就需要訪問?me?頂級域名服務(wù)器?b0.nic.me

為了解決這一個問題,我們引入了膠水記錄(Glue Record)這一概念,也就是在出現(xiàn)循環(huán)依賴時,直接在上一級作用域返回 DNS 服務(wù)器的 IP 地址:

$?dig?+trace?+additional?draveness.me

...

me.????????????172800??IN??NS??a2.nic.me.
me.????????????172800??IN??NS??b2.nic.me.
me.????????????172800??IN??NS??b0.nic.me.
me.????????????172800??IN??NS??a0.nic.me.
me.????????????172800??IN??NS??c0.nic.me.
me.????????????86400???IN??DS??2569?7?1?09BA1EB4D20402620881FD9848994417800DB26A
me.????????????86400???IN??DS??2569?7?2?94E798106F033500E67567B197AE9132C0E916764DC743C55A9ECA3C?7BF559E2
me.????????????86400???IN??RRSIG???DS?8?1?86400?20181116050000?20181103040000?2134?.?cT+rcDNiYD9X02M/NoSBombU2ZqW/7WnEi+b/TOPcO7cDbjb923LltFb?ugMIaoU0Yj6k0Ydg++DrQOy6E5eeshughcH/6rYEbVlFcsIkCdbd9gOk?QkOMH+luvDjCRdZ4L3MrdXZe5PJ5Y45C54V/0XUEdfVKel+NnAdJ1gLE?F+aW8LKnVZpEN/Zu88alOBt9+FPAFfCRV9uQ7UmGwGEMU/WXITheRi5L?h8VtV9w82E6Jh9DenhVFe2g82BYu9MvEbLZr3MKII9pxgyUE3pt50wGY?Mhs40REB0v4pMsEU/KHePsgAfeS/mFSXkiPYPqz2fgke6OHFuwq7MgJk?l7RruQ==
a0.nic.me.????????172800??IN??A???199.253.59.1
a2.nic.me.????????172800??IN??A???199.249.119.1
b0.nic.me.????????172800??IN??A???199.253.60.1
b2.nic.me.????????172800??IN??A???199.249.127.1
c0.nic.me.????????172800??IN??A???199.253.61.1
a0.nic.me.????????172800??IN??AAAA????2001:500:53::1
a2.nic.me.????????172800??IN??AAAA????2001:500:47::1
b0.nic.me.????????172800??IN??AAAA????2001:500:54::1
b2.nic.me.????????172800??IN??AAAA????2001:500:4f::1
c0.nic.me.????????172800??IN??AAAA????2001:500:55::1
;;?Received?721?bytes?from?192.112.36.4#53(g.root-servers.net)?in?110?ms

...

也就是同時返回 NS 記錄和 A(或 AAAA) 記錄,這樣就能夠解決域名解析出現(xiàn)的循環(huán)依賴問題。

服務(wù)發(fā)現(xiàn)

講到現(xiàn)在,我們其實能夠發(fā)現(xiàn) DNS 就是一種最早的服務(wù)發(fā)現(xiàn)的手段,通過雖然服務(wù)器的 IP 地址可能會經(jīng)常變動,但是通過相對不會變動的域名,我們總是可以找到提供對應(yīng)服務(wù)的服務(wù)器。

在微服務(wù)架構(gòu)中,服務(wù)注冊的方式其實大體上也只有兩種,一種是使用 Zookeeper 和 etcd 等配置管理中心,另一種是使用 DNS 服務(wù),比如說 Kubernetes 中的 CoreDNS 服務(wù)。

使用 DNS 在集群中做服務(wù)發(fā)現(xiàn)其實是一件比較容易的事情,這主要是因為絕大多數(shù)的計算機上都會安裝 DNS 服務(wù),所以這其實就是一種內(nèi)置的、默認的服務(wù)發(fā)現(xiàn)方式,不過使用 DNS 做服務(wù)發(fā)現(xiàn)也會有一些問題,因為在默認情況下 DNS 記錄的失效時間是 600s,這對于集群來講其實并不是一個可以接受的時間,在實踐中我們往往會啟動單獨的 DNS 服務(wù)滿足服務(wù)發(fā)現(xiàn)的需求。

CoreDNS

CoreDNS 其實就是一個 DNS 服務(wù),而 DNS 作為一種常見的服務(wù)發(fā)現(xiàn)手段,所以很多開源項目以及工程師都會使用 CoreDNS 為集群提供服務(wù)發(fā)現(xiàn)的功能,Kubernetes 就在集群中使用 CoreDNS 解決服務(wù)發(fā)現(xiàn)的問題。

cncf-logo

作為一個加入 CNCF(Cloud Native Computing Foundation) 的服務(wù) CoreDNS 的實現(xiàn)可以說的非常的簡單。

架構(gòu)

整個 CoreDNS 服務(wù)都建立在一個使用 Go 編寫的 HTTP/2 Web 服務(wù)器?Caddy · GitHub?上,CoreDNS 整個項目可以作為一個 Caddy 的教科書用法。

coredns-architecture

CoreDNS 的大多數(shù)功能都是由插件來實現(xiàn)的,插件和服務(wù)本身都使用了 Caddy 提供的一些功能,所以項目本身也不是特別的復(fù)雜。

插件

作為基于 Caddy 的 Web 服務(wù)器,CoreDNS 實現(xiàn)了一個插件鏈的架構(gòu),將很多 DNS 相關(guān)的邏輯都抽象層了一層一層的插件,包括 Kubernetes 等功能,每一個插件都是一個遵循如下協(xié)議的結(jié)構(gòu)體:

type?(
????Plugin?func(Handler)?Handler

????Handler?interface
?{
????????ServeDNS(context.Context,?dns.ResponseWriter,?*dns.Msg)?(int,?error)
????????Name()?string
????}
)

所以只需要為插件實現(xiàn)?ServeDNS?以及?Name?這兩個接口并且寫一些用于配置的代碼就可以將插件集成到 CoreDNS 中。

Corefile

另一個 CoreDNS 的特點就是它能夠通過簡單易懂的 DSL 定義 DNS 服務(wù),在 Corefile 中就可以組合多個插件對外提供服務(wù):

coredns.io:5300?{
????file?db.coredns.io
}

example.io:53?{
????log
????errors
????file?db.example.io
}

example.net:53?{
????file?db.example.net
}

.:53?{
????kubernetes
????proxy?.?8.8.8.8
????log
????errors
????cache
}

對于以上的配置文件,CoreDNS 會根據(jù)每一個代碼塊前面的區(qū)和端點對外暴露兩個端點提供服務(wù):

coredns-corefile-example

該配置文件對外暴露了兩個 DNS 服務(wù),其中一個監(jiān)聽在 5300 端口,另一個在 53 端口,請求這兩個服務(wù)時會根據(jù)不同的域名選擇不同區(qū)中的插件進行處理。

原理

CoreDNS 可以通過四種方式對外直接提供 DNS 服務(wù),分別是 UDP、gRPC、HTTPS 和 TLS:

coredns-servers

但是無論哪種類型的 DNS 服務(wù),最終隊會調(diào)用以下的?ServeDNS?方法,為服務(wù)的調(diào)用者提供 DNS 服務(wù):

func?(s?*Server)?ServeDNS(ctx?context.Context,?w?dns.ResponseWriter,?r?*dns.Msg)?{
????m,?_?:=?edns.Version(r)

????ctx,?_?:=?incrementDepthAndCheck(ctx)

????b?:=?r.Question[0].Name
????var?off?int
????var?end?bool

????var?dshandler?*Config

????w?=?request.NewScrubWriter(r,?w)

????for?{
????????if?h,?ok?:=?s.zones[string(b[:l])];?ok?{
????????????ctx?=?context.WithValue(ctx,?plugin.ServerCtx{},?s.Addr)
????????????if?r.Question[0].Qtype?!=?dns.TypeDS?{
????????????????rcode,?_?:=?h.pluginChain.ServeDNS(ctx,?w,?r)
?????????????dshandler?=?h
????????}
????????off,?end?=?dns.NextLabel(q,?off)
????????if?end?{
????????????break
????????}
????}

????if?r.Question[0].Qtype?==?dns.TypeDS?&&?dshandler?!=?nil?&&?dshandler.pluginChain?!=?nil?{
????????rcode,?_?:=?dshandler.pluginChain.ServeDNS(ctx,?w,?r)
????????plugin.ClientWrite(rcode)
????????return
????}

????if?h,?ok?:=?s.zones["."];?ok?&&?h.pluginChain?!=?nil?{
????????ctx?=?context.WithValue(ctx,?plugin.ServerCtx{},?s.Addr)

????????rcode,?_?:=?h.pluginChain.ServeDNS(ctx,?w,?r)
????????plugin.ClientWrite(rcode)
????????return
????}
}

在上述這個已經(jīng)被簡化的復(fù)雜函數(shù)中,最重要的就是調(diào)用了『插件鏈』的?ServeDNS?方法,將來源的請求交給一系列插件進行處理,如果我們使用以下的文件作為 Corefile:

example.org?{
????file?/usr/local/etc/coredns/example.org
????prometheus?????#?enable?metrics
????errors?????????#?show?errors
????log????????????#?enable?query?logs
}

那么在 CoreDNS 服務(wù)啟動時,對于當前的?example.org?這個組,它會依次加載?file、log、errors?和?prometheus?幾個插件,這里的順序是由 zdirectives.go 文件定義的,啟動的順序是從下到上:

var?Directives?=?[]string{
??//?...
????"prometheus",
????"errors",
????"log",
??//?...
????"file",
??//?...
????"whoami",
????"on",
}

因為啟動的時候會按照從下到上的順序依次『包裝』每一個插件,所以在真正調(diào)用時就是從上到下執(zhí)行的,這就是因為?NewServer?方法中對插件進行了組合:

func?NewServer(addr?string,?group?[]*Config)?(*Server,?error)?{
????s?:=?&Server{
????????Addr:????????addr,
????????zones:???????make(map[string]*Config),
????????connTimeout:?5?*?time.Second,
????}

????for?_,?site?:=?range?group?{
????????s.zones[site.Zone]?=?site
????????if?site.registry?!=?nil?{
????????????for?name?:=?range?enableChaos?{
????????????????if?_,?ok?:=?site.registry[name];?ok?{
????????????????????s.classChaos?=?true
????????????????????break
????????????????}
????????????}
????????}
????????var?stack?plugin.Handler
????????for?i?:=?len(site.Plugin)?-?1;?i?>=?0;?i--?{
????????????stack?=?site.Plugin[i](stack)
????????????site.registerHandler(stack)
????????}
????????site.pluginChain?=?stack
????}

????return?s,?nil
}

對于 Corefile 里面的每一個配置組,NewServer?都會講配置組中提及的插件按照一定的順序組合起來,原理跟 Rack Middleware 的機制非常相似,插件?Plugin?其實就是一個出入?yún)?shù)都是?Handler?的函數(shù):

type?(
????Plugin?func(Handler)?Handler

????Handler?interface
?{
????????ServeDNS(context.Context,?dns.ResponseWriter,?*dns.Msg)?(int,?error)
????????Name()?string
????}
)

所以我們可以將它們疊成堆棧的方式對它們進行操作,這樣在最后就會形成一個插件的調(diào)用鏈,在每個插件執(zhí)行方法時都可以通過?NextOrFailure?函數(shù)調(diào)用下一個插件的?ServerDNS?方法:

func?NextOrFailure(name?string,?next?Handler,?ctx?context.Context,?w?dns.ResponseWriter,?r?*dns.Msg)?(int,?error)?{
????if?next?!=?nil?{
????????if?span?:=?ot.SpanFromContext(ctx);?span?!=?nil?{
????????????child?:=?span.Tracer().StartSpan(next.Name(),?ot.ChildOf(span.Context()))
????????????defer?child.Finish()
????????????ctx?=?ot.ContextWithSpan(ctx,?child)
????????}
????????return?next.ServeDNS(ctx,?w,?r)
????}

????return?dns.RcodeServerFailure,?Error(name,?errors.New("no?next?plugin?found"))
}

除了通過?ServeDNS?調(diào)用下一個插件之外,我們也可以調(diào)用?WriteMsg?方法并結(jié)束整個調(diào)用鏈。

coredns-plugin-chain

從插件的堆疊到順序調(diào)用以及錯誤處理,我們對 CoreDNS 的工作原理已經(jīng)非常清楚了,接下來我們可以簡單介紹幾個插件的作用。

loadbalance

loadbalance 這個插件的名字就告訴我們,使用這個插件能夠提供基于 DNS 的負載均衡功能,在?setup?中初始化時傳入了?RoundRobin?結(jié)構(gòu)體:

func?setup(c?*caddy.Controller)?error?{
????err?:=?parse(c)
????if?err?!=?nil?{
????????return?plugin.Error("loadbalance",?err)
????}

????dnsserver.GetConfig(c).AddPlugin(func(next?plugin.Handler)?plugin.Handler?{
????????return?RoundRobin{Next:?next}
????})

????return?nil
}

當用戶請求 CoreDNS 服務(wù)時,我們會根據(jù)插件鏈調(diào)用 loadbalance 這個包中的?ServeDNS?方法,在方法中會改變用于返回響應(yīng)的?Writer

func?(rr?RoundRobin)?ServeDNS(ctx?context.Context,?w?dns.ResponseWriter,?r?*dns.Msg)?(int,?error)?{
????wrr?:=?&RoundRobinResponseWriter{w}
????return?plugin.NextOrFailure(rr.Name(),?rr.Next,?ctx,?wrr,?r)
}

所以在最終服務(wù)返回響應(yīng)時,會通過?RoundRobinResponseWriter?的?WriteMsg?方法寫入 DNS 消息:

func?(r?*RoundRobinResponseWriter)?WriteMsg(res?*dns.Msg)?error?{
????if?res.Rcode?!=?dns.RcodeSuccess?{
????????return?r.ResponseWriter.WriteMsg(res)
????}

????res.Answer?=?roundRobin(res.Answer)
????res.Ns?=?roundRobin(res.Ns)
????res.Extra?=?roundRobin(res.Extra)

????return?r.ResponseWriter.WriteMsg(res)
}

上述方法會將響應(yīng)中的?Answer、Ns?以及?Extra?幾個字段中數(shù)組的順序打亂:

func?roundRobin(in?[]dns.RR)?[]dns.RR?{
????cname?:=?[]dns.RR{}
????address?:=?[]dns.RR{}
????mx?:=?[]dns.RR{}
????rest?:=?[]dns.RR{}
????for?_,?r?:=?range?in?{
????????switch?r.Header().Rrtype?{
????????case?dns.TypeCNAME:
????????????cname?=?append(cname,?r)
????????case?dns.TypeA,?dns.TypeAAAA:
????????????address?=?append(address,?r)
????????case?dns.TypeMX:
????????????mx?=?append(mx,?r)
????????default:
????????????rest?=?append(rest,?r)
????????}
????}

????roundRobinShuffle(address)
????roundRobinShuffle(mx)

????out?:=?append(cname,?rest...)
????out?=?append(out,?address...)
????out?=?append(out,?mx...)
????return?out
}

打亂后的 DNS 記錄會被原始的?ResponseWriter?結(jié)構(gòu)寫回到 DNS 響應(yīng)中。

loop

loop 插件會檢測 DNS 解析過程中出現(xiàn)的簡單循環(huán)依賴,如果我們在 Corefile 中添加如下的內(nèi)容并啟動 CoreDNS 服務(wù),CoreDNS 會向自己發(fā)送一個 DNS 查詢,看最終是否會陷入循環(huán):

.?{
????loop
????forward?.?127.0.0.1
}

在 CoreDNS 啟動時,它會在?setup?方法中調(diào)用?Loop.exchange?方法向自己查詢一個隨機域名的 DNS 記錄:

func?(l?*Loop)?exchange(addr?string)?(*dns.Msg,?error)?{
????m?:=?new(dns.Msg)
????m.SetQuestion(l.qname,?dns.TypeHINFO)
????return?dns.Exchange(m,?addr)
}

如果這個隨機域名在?ServeDNS?方法中被查詢了兩次,那么就說明當前的 DNS 請求陷入了循環(huán)需要終止:

func?(l?*Loop)?ServeDNS(ctx?context.Context,?w?dns.ResponseWriter,?r?*dns.Msg)?(int,?error)?{
????if?r.Question[0].Qtype?!=?dns.TypeHINFO?{
????????return?plugin.NextOrFailure(l.Name(),?l.Next,?ctx,?w,?r)
????}

????//?...

????if?state.Name()?==?l.qname?{
????????l.inc()
????}

????if?l.seen()?>?2?{
????????log.Fatalf("Forwarding?loop?detected?in?\"%s\"?zone.?Exiting.?See?https://coredns.io/plugins/loop#troubleshooting.?Probe?query:?\"HINFO?%s\".",?l.zone,?l.qname)
????}

????return?plugin.NextOrFailure(l.Name(),?l.Next,?ctx,?w,?r)
}

就像 loop 插件的 README 中寫的,這個插件只能夠檢測一些簡單的由于配置造成的循環(huán)問題,復(fù)雜的循環(huán)問題并不能通過當前的插件解決。

總結(jié)

如果想要在分布式系統(tǒng)實現(xiàn)服務(wù)發(fā)現(xiàn)的功能,DNS 以及 CoreDNS 其實是一個非常好的選擇,CoreDNS 作為一個已經(jīng)進入 CNCF 并且在 Kubernetes 中作為 DNS 服務(wù)使用的應(yīng)用,其本身的穩(wěn)定性和可用性已經(jīng)得到了證明,同時它基于插件實現(xiàn)的方式非常輕量并且易于使用,插件鏈的使用也使得第三方插件的定義變得非常的方便。

References

  • What is DNS? | How DNS works

  • 移動互聯(lián)網(wǎng)時代,如何優(yōu)化你的網(wǎng)絡(luò) —— 域名解析篇

  • How Queries Are Processed in CoreDNS

  • Domain Name System

  • DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION · RFC1035

  • A fun and colorful explanation of how DNS works.

  • Root Servers

  • What is the DNS Protocol?

  • Root name server · Wikipedia

  • CoreDNS for Kubernetes Service Discovery, Take 2

  • Kubernetes DNS-Based Service Discovery

  • CoreDNS Manual





K8S進階訓練營,點擊下方圖片了解詳情


瀏覽 69
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 2017天天干天天射| 伊人大香蕉综合在线| 亚洲码AV波多野| 成人A毛片| 国产色无码网站www色视频| 熟女老阿V8888AV| 日韩AV无码高清| 色999网址| 亚洲理论片| 欧美日韩国内| 成人精品秘免费波多野结衣| 国产一区在线观看视频| 日日骚中文字幕| 人人操人人摸人人干| 婷婷色色婷婷| 精品无码人妻一区二区三区| 亚洲深夜福利| 91一区二区在线观看| 甘肃WBBBB搡wBBBB| 亚洲精品国产精品国自产在线| 久草精品视频| 欧日韩在线| 日本中文字幕在线免费观看| 一级做a爰片毛片A片| 最新一区二区三区| 激情视频国产| 国产AV无码高清| 欧美污视频在线观看| 亚洲色婷婷久久精品AV蜜桃| 日韩无码毛片| www.干| 国产办公室丝袜人妖| 成人精品一区日本无码网站suv| 亚洲成人动漫在线| 欧美AAAAAA视频| 91精品国产综合久久久蜜臀酒店| 军人妓女院BD高清片在线播放| 三级无码电影| 婷婷午夜福利| 69AV免费视频| 五月天在线电影| 五月婷婷六月丁香| 国产人妖视频| 成人激情五月天| 婷婷三级片| 欧美一级A片在线观看| 精品视频免费在线观看| 国产三级成人| 午夜操爽| 99热在线播放| 国产黄色在线视频| 一本色道久久综合亚洲二区三区 | 欧美午夜视频| 久久久久久久久久久成人| 免费观看高清无码| 综合伊人大香蕉| 91操操操| 中文字幕天堂网| 黄色视频一区二区| 无码激情| 少妇无码视频| 国模精品无码一区二区免费蜜桃| 777Av| 婷婷无码在线| 12一15女人A片毛| 91蝌蚪视频在线播放| 日韩av无码中文字幕| 五月亚洲六月婷婷| 久久久国产探花视频| 欧美黄色电影网站| 无码人妻丰满熟妇区毛片视频| 97人妻精品一区二区三区视频| 亚洲无码入口| 五月婷在线观看| 另类BBwBBw| 日韩一区二区三区四区久久久精品有吗 | 不卡视频一区| 国产成人无码精品一区秘二区 | 日韩中文字幕精品| 动漫一区二区| 手机在线毛片| 国产第页| 中文√在线天堂8| A视频免费在线观看| 天天谢天天干| 亚洲精品性爱| 婷婷情色五月| AV一区二区三区| 午夜成人福利电影| 手机看片久久| 久久久噜噜噜久久中文字幕色伊伊| 色色影院| 99毛片| 俺来也俺去也www色官网| 久久这里只有精品9| 秋霞福利影院| 免费在线观看A| 手机在线毛片| 免费黄视频在线观看| 热re99久久精品国产99热| 中文字幕特黄A片| 亚洲国产成人精品激情在线| 人人操人人操人人操人人操人人操| 韩国中文字幕HD久久| 天天干天天摸| 国产三级| 欧美高清无码| 九九热毛片在线观看| 国产精品96久久久久久| 亚洲色视频| 欧美成人视频在线观看| 波多野结衣成人视频| 无码一区在线观看| 人人看人人摸人人| 乱伦性爱视频| 精品91| 日本免费爱爱视频| 99久久99| 人人做人人爱人人做人人乐的意思| 色噜噜噜| 操东北老女人| 国产精品秘久久久久久免费播放| 日韩精品无码一区二区| 亚洲婷婷五月| 亚洲操逼网| 91成人在线观看国产| 日本a视频| 欧美亚洲天堂| 亚洲无码播放| 亚洲AVwww| 亚洲福利女神成人福利| 黄色一区在线| 久久午夜无码鲁片午夜精品男男 | 91人妻人人澡人人爽人人精品一| 久操久操久操| 欧美+日韩+国产+成人+在线| 欧美视频区| 91精品青青草| 国产网站精品| 夜夜撸日日| av在线中文| 日本久久视频| 欧美日韩一二| 性爱视频无码| 久久久久99精品成人网站| 成人三级片在线| 婷婷五月天亚洲| 西西特级无码444www| 日韩一区二区无码| av高清无码| 波多野结衣毛片| 日本处女性高潮喷水视频| 懂色成人av影院| 逼逼爱插插网站| 中国少妇xxx| 国产综合色网| 日韩一级在线免费观看| 老鸭窝成人视频| 韩日在线视频| 久久久久成人精品无码| 亚人精品中文字幕在线观看| 999免费视频| 蜜臀导航| 国产亚洲久一区二区^_^| 一级欧美一级日韩| 欧美亚洲综合手机在线| 俺来俺去www色婷婷| 成人无码99| 国产乱子伦一区二区三| 国产精品无码激情| 成人免费A片喷| 欧美激情无码一区二区三区张丽| 欧美日韩免费一区二区三区| 亚洲无码免费在线| www.亚洲天堂| 久久亚洲中文字幕乱码| 欧美成人电影| 超碰碰碰| 国产精品久久久久久无人区| 成人做爰黄A片免费视频网站野外| 操一区| 国产精品无码白浆高潮| 91嫖妓站街按摩店老熟女| 亚洲激情视频| 444444免费高清在线观看电视剧的注意| 中文字幕永久免费| 日本A片在线观看| 中文字字幕在线中文乱码更新时间 | 亚洲美女视频网| 久久大香蕉91| 无码草逼| 狠狠干2021| 加勒比色综合| 欧美狠狠干| 亚洲无码操逼视频| 国产91丝袜在线播放| 亚州v| 艹逼免费视频| 天天日天天射天天干| 国产毛片视频| 99精品在线| 黄色电影天堂网站| 亚洲一区二区免费视频| BBB搡BBB搡BBB搡BBB| 你懂得在线观看| 午夜av影院| 国产精品一二三| 操一操干一干| 精品人妻一区二区三区蜜桃| 国产精品无码中文在线| 免费在线观看a片| 免费一区| 亚洲在线观看| 日韩欧美性爱网站| 国产1级a毛a毛1级a毛1级| 亚洲免费观看高清完整版| 黄片在线免费观看视频| 98色色| 手机看片久草| 亚洲午夜久久| 色老板最新地址| 91在线无码精品秘国产| 亚洲欧美人妻| 在线日韩中文字幕| 嘿嘿午夜影院| 免费国产三级片| 成人无码区免费| 午夜社区| 欧美操逼免费视频| 黄色视频在线观看地址| 你操综合| 日韩爱爱视频| 佳佳女王footjob超级爽| 婷婷中文| 黑人精品| 欧美一二| 一级黄片免费看| 成人亚洲网| 在线欧美日韩| 日本黄在线观看| 91热| 亚洲精品成人无码熟妇在线| 无码H| 亚洲专区在线| AAA黄片| 国产在线观看自拍| 人妻少妇偷人精品久久| 福利在线| 美女做爱网站| wwwxx在线观看| 丰滿人妻一区二区三| 操逼啦| 中文字幕永久免费| JlZZJLZZJlZZ亚洲女人17| 人人澡人人摸| 蜜臀av一区二区| 免费无码高清视频| 亚洲AV无码一区毛片AV| 一区电影网| 国产色综合视频| 色妹子综合| 你懂的在线视频观看| 国产欧美成人在线| 夜夜夜操| 九九九精品| 中文字幕北条麻妃| 亚洲日韩欧美一区二区天天天| 天堂无码在线| 中文字幕日韩一| 欧美v亚洲| 亚洲欧洲成人在线| 亚洲中文字幕电影| 成年片免费观看网站免费观看,亚洲+欧... | 豆花AV在线| www.久久99| 国际精品久久久| 性生活无码视频| 亚洲在线视频免费观看| 人人摸人人摸| 一级黄色片免费观看| 免费的av网站| 豆花成人社区,视频| 天天摸天天肏| 黄色片a片| 狠狠干2018| 91人妻一区二区| 成人AV在线资源| 亚洲无码视频在线看| 亚洲吹箫| 在线观看精品视频| www国产精品| 日韩东京热中文字幕| 九九久久久久| 欧美成人激情视频| 日本老妇操屄视频| 大香蕉草久| www.99视频| 俺来也官网欧美久久精品| 艹逼片| 欧美一級黃色A片免費看| 精品一区二区三区四区| 亚州视频在线观看| 亚洲色图一区二区三区| 色卻A| 黄色一级片在线| 日韩| 91丨九色丨熟女老版| 性爱一级片| 久热精品视频在线观看| 亚洲天堂AV2025| 围内精品久久久久久久久久‘变脸| 在线观看污视频| 中文字幕无码精品三级在线欧美 | 亚洲天堂男人天堂| 伊人网视频在线| 五月天在线电影| 99久久精品国产一区二区成人| 少妇大战黑人46厘米| 亚洲日韩精品成人无码专区AV| 日韩欧美123| 一线天嫩穴少妇| 日本黄色免费在线观看| 91久久国产性奴调教| 一级成人片在线观看| 青青在线免费视频| 亚洲播播| 免费观看在线黄片| 操逼视频在线看| 在线观看毛片网站| AV婷婷五月天| av女人天堂| 中文字幕在线视频日本| 亚洲成人AV在线观看| 后入少妇视频| 亚洲天堂av网| 51福利视频| 99无码精品| 蜜臀99久久精品久久久久久软件 | 大香蕉在线视频网| 人人人人操| 色五月婷婷五月天激情| 欧美一区二区三区免费| 操你啦日韩| chinese搡老熟老妇人| 蜜臀久久99精品久久久电影| 欧美日韩视频一区二区| 日本爱爱小视频| 51一区二区三区| 三级片中文| 无码字幕| 黄色片a片| 国产色情性黄片Av网站| 成人自拍视频在线| 久久99热这里只频精品6学生| 亚洲最新AV在线| 色色777| www日本高清| 91社成人影院| 影音先锋av在线资源站| 久久大奶| 亚洲无码播放| 免费黄色视频网站大全| 怡春院免费视频| 53岁露大奶熟女偷情贴吧| 91综合视频| 国产白浆一区二区三区| 亚洲精品婷婷| 91精品国产乱码久久久久| 成人三级电影在线观看| 国产AV无码一区| 成人h视频| 伊人丁香| 嫩草视频在线观看| 国产男女av| 成人欧美精品区二区三| 精品国产免费观看久久久_久久天天| 先锋影音男人资源站| 久久久久99精品成人网站| 欧美成人福利视频| 蜜桃AV在线播放| 国内一级黄片| 69网站| 国产,亚洲91| 国产成人精品123区免费视频| 色欲天天网| 亚洲国产成人91PORN| 看国产毛片| 在线无码不卡| 丰满无码| 各种妇女撒尿mm毛免费网站 | 免费一区二区三区| 91人人操人人| 无码迷穴| 99久久婷婷国产综合精品漫| 日本无码久久嗯啊流水| 国产精品久久久精品cos| 国产欧美一区二区三区国产幕精品| 在线观看免费国产| 插菊花综合网亚洲| 91成人导航| 国产精品黄视频| 欧美成人在线网站| 亚洲av资源在线观看| 日本无码在线播放| 国产一级婬乱A片| 国产精品婷婷| 一区二区三区在线观看免费| 91久久久久久久久18| 俺去俺来也www色官网黑人| 欧美色性乐汇操日本娘们| 欧美日本中文字幕| 国产精品无码永久免费A片| 中文字幕无码视频在线观看| 日本久久不卡| 亚洲人妻少妇| 国产自慰一区| 欧美一级爱爱| 啪啪网站免费观看| 欧美91熟| 丰满人妻一区二区| 日韩国产综合| 韩国精品无码一区二区三区18| 精品人妻一区二区三区蜜桃| 大鸡巴导航| 午夜综合在线| 国产激情免费视频| 国产棈品久久久久久久久久九秃| 日日夜夜超碰| 婷婷中文字幕| 日韩,变态,另类,中文,人妻 | 五月天在线电影| 91女人18毛片水多的意思 | 久草视频网站| 五月丁香电影| 成人毛片在线播放免费| 一区二区三区视频在线| 久久综合婷婷| 天天摸天天操| 99re66| 日韩欧AV| 久操人妻| 亚洲一在线| 亚洲成人免费| 久久精品一区二区三区不卡牛牛| 親子亂子倫XXXX| 亚洲AV成人精品一区二区三区| 五月婷婷视频在线观看| 五月丁香网站| 插逼视频网站| 亚洲精品久久久久毛片A级牛奶| 人人摸人人操人人| 国产avwww| 高清中字无码| 豆花视频logo| 欧美一级片免费观看| 国产久久久久| 久久久精品午夜人成欧洲亚洲韩国 | 三级国产| 青青在线免费视频| 欧美视频手机在线| 青青草精品视频| 一本加勒比HEZYO东京热无码 | 亚洲天堂无码在线| 中文字幕无码人妻在线视频| 五月天深爱激情网| 69免费视频| 在线观看黄A片免费网站| 激情乱伦网| 在线色| 亚洲热视频在线观看| 色色加勒比综合| 久久与婷婷| 久久久91人妻无码精品蜜桃ID| 亚洲无码电影在线观看| 黄色一级免费电影| 久久99高清| 69av在线观看| 91人妻人人| 欧洲a视频| 东京热免费视频| 国产Av高清| www.操逼网| 欧洲精品码一区二区三区免费看| 中文字幕永久在线观看| 五月天久久久久久久| 久热中文字幕| 97精品人人妻人人| AV片免费看| 国产美女精品久久AV爽| 六月婷婷激情| 最近中文字幕无码| 91夫妻交友视频| 国产精品视频久久久| 免费作爱视频| 日韩操大屌| 青娱乐99| 一道本无码在线视频| 日日騒av无码| 日韩无码中字| 操比网| 人妻丰满精品一区二区| 欧洲天堂在线视频网站| 18国产免费视频在线观看| 日本黄色片视频| 亚洲无码操逼视频| 97久久精品国产熟妇高清网| 国产AV中文| 五月天啪啪视频| 麻豆传媒在线观看| 亚洲欧美精品在线| 欧美日韩色情| 99资源站| 刘玥91精品一区二区三区| Chinese搡老女人| 欧美国产在线观看| 久久水密桃| 双飞少妇| 激情五月天在线观看| 国产小福利| AV性爱社区| 激情色播| 曰逼视频| 无码逼逼| 婷婷综合缴情亚洲另类在线| 日韩免费高清无码| 国产口爆在线观看| 骚骚肥肥一区二区三区| 姐弟乱伦性爱| 欧美成人精品一区二区三区| 精品日韩一区二区三区| 99成人在线视频| 久久黄色免费看| 囯产精品宾馆在线精品酒店| 日韩色色网| 开心黄色网| 国产AV久| 高清无码18| 操逼a片| 亚洲插菊花综合网| 成人在线三级| 中文字幕免费视频在线播放| 亚洲成人视频在线| 七六十路の高齢熟妇无码| 成人福利视频在线| 女人自慰网站在线观看| 亚洲图片欧美色图| WWWA片| 一区二区在线免费观看| 欧美成人午夜影院| 黄色大片AV在线| 青青青视频在线| 国产美女高潮视频| 成人在线第一页| 人人操人人看人人干| 国产色片| 玖玖国产| 国产成人性爱| 中文字幕亚洲天堂| 亚洲精品久久久久毛片A级牛奶| 97国产精品| 亚洲第一av| 艳妇乳肉豪妇荡乳AV无码福利| 国产熟睡乱子伦午夜视频_第1集 | 久久黄色免费视频| 亚洲成人无码视频在线观看| 中文字幕成人网站中文字幕| 中文字幕免费在线看一区七区| 亚洲高清在线播放| 无码成人午夜在线影院| 亚洲日韩欧美成人| 操逼激情视频| 丁香花在线小说免费阅读| 日韩性视频| 性爱国产| 免费看黄A级毛片成人片| 97大香蕉在线视频| 欧美第一视频| 国产乱伦精品视频| www.一区二区| 色色视频网| 揄拍成人国产精品视频| 五月天青青草超碰免费公开在线观看 | 日本乱伦视频| 97人妻精品一区二区三区视频| 亚洲视频91| 人妻丰满精品一区二区| 国产极品久久久| 无码中文暮| 久久精品一区二区三区四区 | 西西人体444大胆高清张悠雨| 天天操夜夜撸| 免费观看一区二区三区| 成人毛片18| 中文一区在线观看| 亚洲综合免费| 欧美成人视频| 久久久性爱视频| 日韩成人一区二区三区| 国产a片免费看| 91av一区| 三级视频国产| 亚洲一区二区三区免费视频 | 苍井空一区二区三区四区| 综合成人在线| 亚洲无码久久| 强伦轩农村人妻| 人人天天夜夜| 国产一级婬片A片免费无成人黑豆 国产真实露脸乱子伦对白高清视频 | 国产系列第一页| 91嫩草久久久久久久| 中文无码精品欧美日韩| 国产精品123| 夜夜操夜夜爽| 91绿帽人妻-ThePorn| 天天骑夜夜操| 日本三级黄色| 无码专区中文字幕| 永久m3u8在线观看| 99久久亚洲精品日本无码| 北岛玲视频在线| 全部免费黄色视频| 国产AV高清| 在线播放亚洲| 婷婷啪啪| 中文字幕无码Av在线看| 国产性爱在线视频| 亚洲精品资源在线| 成人黄色免费看| 中文无码高清视频| 日韩三级黄色| 精品国产一二三区| 中文无码网站| 亚洲国产剧情| 色香蕉视频在线观看| 精品乱伦| 亚洲欧美性爱| 国产乱码一区二区三区的解决方法 | 69AV在线观看| 午夜在线观看视频18| 激情久久婷婷| 久草手机视频| 国产精品免费一区二区三区都可以 | 免费国产视频| 最新中文字幕在线| 巜人妻初尝按摩师BD中字| 欧美大屌视频| 手机看片1204| 热99re69精品8在线播放| 美女免费网站| 一插综合网| 99福利| 丁香网五月天| 中文字幕北条麻妃在线| 91久久午夜无码鲁丝片久久人妻| 欧美大鸡巴在线观看| 亚洲中文无码AV在线| 亚洲精品日韩综合观看成人91| 久久中文字幕无码| 国产在线观看自拍| 成人精品A片免费网站| 中字一区人妻水多多| 久久香蕉综合在线| 大香蕉久久| 国产久久视频| 天天综合视频| 99热综合| 久热综合| 北条麻妃视频在线| 亚洲欧美性爱| 99热国产精品| 北条麻妃久久| 91传媒在线观看| 亚洲国产精品视频| 亚洲日韩一区二区| 91成人亚洲| 一区色| 精品操逼| 俺也操| 亚洲精品三级| 欧美一级成人片| 少妇推油呻吟白浆啪啪成人片 | 久热精品在线观看视频| 欧美成人视频网| 欧美囗交大荫蒂免费| 亚洲AV无码精品国产| 青青草视频免费看| 天堂资源地址在线| 影音先锋人妻资源| 亚洲色在线视频| 国产精品色情A级片| 日本欧美中文| 日韩中文字幕一区二区三区| 日产精品久久| 成年人性生活免费视频| 日韩日日操| 五月天堂婷婷| 国精产品九九国精产品| 一区二区三区高清不卡| 91欧美精品成人AAA片| 中文字幕性爱电影| 国产精品福利在线播放| 国产午夜精品一区二区三区四区| www.91madou| 一本色道综合久久欧美日韩精品| 一区二区三区四区五区| 国产Av影视| 国产精品免费观看久久久久久久久| 99久久婷婷| 亚洲一级免费视频| 一级特黄AA片| 国产又色又爽又黄又免费| 激情动态视频| 无码人妻一区二区一牛影视| 欧美性BBB槡BBB槡BBB| 东京热黄色| 在线观看国产一区| 黄色视频在线免费播放| 老司机免费福利视频| 国产理论| 久久国产无码| 欧美成人视频18| 日韩欧美不卡色不卡| 91视频青青草| 欧美成人福利视频| av手机天堂网| 男人的天堂网页| 中文字幕亚洲视频在线观看| 中文在线免费看视频| 久久成人电影院| 日韩无码免费播放| 日韩成人在线播放| 天堂资源网| ⅴA日本成人| 91国产视频在线播放| 夜夜嗨AV一区二区三区啊| www天天日| 日本中文字幕在线观看视频 | 国产精品高清网站| 五月丁香六月色| 免费在线观看黄片视频| 亚洲二区在线| 97黄片| 亚洲综合视频在线| 中文字幕av无码| 精品视频在线播放| 不卡无码中文字幕一区| A无码| 另类老妇性BBBWBBW| 岛国AV片| 亚洲麻豆| 日韩十八禁网站| 日韩精品在线观看视频| 人人超碰人人| 99re在线视频| www.91com| 字幕一区二区久久人妻网站| 操美女视频网站| 亚洲综合在线视频| 国产又粗又长视频| 免费一级无码婬片A片AAA毛片 | 亚洲国产成人精品女人| 探花极品无套大学生| 无码激情| 69AV视频在线观看| 国产一级电影网站| 一道本av| 国产午夜成人视频| 成人无码一区二区| 囯产精品一区二区三区AV做线 | 黄片视频国产| 日本无码片| 亚洲国产精品久久| 骚逼免费观看| 国产成人精品视频| 一区二区三区无码高清| 手机在线看片av| 俺也去在线视频| 免费无码蜜臀在线观看| 日韩99在线观看| 人人妻人人妻| 无套内射在线| 影音先锋一区| 囯产精品久久久久久久久久辛辛| 小小拗女BBw搡BBBB搡| 69av在线播放| 人人澡超碰碰| 在线亚洲日韩| 99精品视频在线播放免费| 在线观看视频你懂的| 色94色.欧美.setu| 操逼在线免费观看| 蜜桃人妻无码| 欧洲黑人成人A版免费视频| 亚洲无码精品久久| 人妻少妇偷人精品久久| 草比网| 91亚洲国产成人精品一区| 国产久久久久久久久久| 国产性爱电影网| 免费乱伦| 婷婷俺也去| 国产一级在线免费观看| 狠狠干在线| 色婷婷精品视频| 亚洲欧美日韩免费| 美女黄网站| 猛男大粗猛爽H男人味| 久久久成人影片| 婷婷五月天在线电影| 亚洲卡一卡二| 亚洲美女在线观看| 国产AV黄| 天堂精品在线| 亚洲天堂无码视频| 亚洲日韩精品在线观看| 中文字幕一二三四| 午夜操人妻| 水果派解说在线观看| 先锋影音一区二区| 国产a片免费观看| 欧美精品久久久久久久久爆乳| 天干天干天夜夜爽| 俺来也俺去也www色官网| 亚洲天堂无码av| 在线中文字幕在线观看| 亚洲福利片| 男女日逼网站| 欧美h在线观看| 国产精品一区二区黑人巨大| 人人摸人人搞| 国产成人A| 亚洲成色A片77777在线小说| 91人人妻人人澡人人爽人人精品| 国产一区二区免费看| 国产在线观看免费视频| 色情电影网站| 国产一級A片免费看| 人妻熟女88AⅤ| 午夜精品久久久久久久久无码99热| 婷婷三区| 国产精品一区二| 谁有毛片网址| 操逼超碰| 蜜桃av久久久亚洲精品| 好想被c秘好爽n网址| 真实国产乱子伦毛片| JULIA超乳JULIA无码| 可以看的毛片| 国产成人自拍视频在线| 国产精品HongKong麻豆| 日本免费一区二区三区| 在线有区别亚洲| 中国黄色学生妹一级片| 尤物视频在线观看视频| 一区二区三区国产精品| 黄片高清免费观看| 黄片无码| 日韩欧美在线视频观看| 97香蕉久久国产超碰青草专区| 国产精品成人无码专区| 国产久久久久久久久| 欧美亚韩| 六月婷婷七月丁香| 久久精品水多多www| 成人自拍视频| 中文一级片| 婷婷香蕉| 超碰最新在线| 久久国产激情| 亚洲综合在线观看视频| 国产精品日韩高清北条麻衣| 不卡的AV| 成人性爱视频免费在线观看| 亚日韩在线| 在线日韩中文字幕| 精品视频在线观看| 一级AA片| 日韩高清AV| 成人毛片18女人毛片| 亚洲午夜无码| 色婷婷色五月| 成人黄片免费| 黄片免费看视频| 欧美黄片免费在线观看| 亚洲黄色影视| 亚洲中文综合| 翔田千里無碼破解| 麻豆一区二区三区四区| 成人电影久久久| 人人看人人爱| 日韩h视频| 91成人看片| 日韩三级片无码| 色五月在线观看| 大香蕉婷婷五月天| 欧美日韩亚洲中文字幕| 日皮在线观看| 日韩成人无码专区| 国产精品无码av| 免费无码AV|