精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

云原生小技巧 : 如何在本地調(diào)試 Kubernetes Webhook?

開(kāi)發(fā) 前端
在本文中,我們深入了解了 Kubernetes Webhook 的本地調(diào)試流程,從基礎(chǔ)理解到實(shí)際操作。通過(guò)將傳統(tǒng)的基于服務(wù)的配置方式轉(zhuǎn)變?yōu)橹苯邮褂?URL,我們不僅克服了本地調(diào)試的局限性,還引入了前所未有的靈活性和效率,大幅優(yōu)化了整個(gè)開(kāi)發(fā)周期。

如果你是一名 Kubernetes Operator 的開(kāi)發(fā)者,你曾經(jīng)是否面臨過(guò)這樣一個(gè)棘手的問(wèn)題:如何在本地環(huán)境中高效地調(diào)試 Webhook,尤其是在涉及有效證書(shū)回調(diào)的情況下。這篇文章旨在提供一種清晰的指南,幫助你克服這一挑戰(zhàn),優(yōu)化本地開(kāi)發(fā)和測(cè)試流程。

為什么本地調(diào)試 Webhook 如此重要?

當(dāng)我們初步涉足 Kubernetes Webhook 時(shí),面對(duì)的首個(gè)挑戰(zhàn)通常是 Validation Webhook。對(duì)于這種驗(yàn)證型 Webhook 來(lái)說(shuō),我們可以通過(guò)編寫(xiě)自動(dòng)化測(cè)試來(lái)驗(yàn)證其功能。

這不僅確保了我的 Webhook 按預(yù)期工作,還允許我在日常開(kāi)發(fā)中臨時(shí)禁用它,從而加快了整個(gè)開(kāi)發(fā)過(guò)程。這種方法讓我能夠巧妙地避免復(fù)雜的調(diào)試問(wèn)題,而不對(duì)整體功能造成任何影響。

if os.Getenv("ENABLE_WEBHOOKS") != "false" {
    if err = (&webappv1.Guestbook{}).SetupWebhookWithManager(mgr); err != nil {
        setupLog.Error(err, "unable to create webhook", "webhook", "Guestbook")
        os.Exit(1)
    }
}

然而,對(duì)于 Mutating Webhook 來(lái)說(shuō),情況就變得有點(diǎn)復(fù)雜了。這類 Webhook 通常負(fù)責(zé)埋點(diǎn)的行為甚至更深層次的集群操作,比如注入 sidecar,這時(shí)候單靠自動(dòng)化測(cè)試顯然是不夠的。我們需要一個(gè)更加高效的本地測(cè)試和調(diào)試方法。

在我們團(tuán)隊(duì)中,有同事采用 Kind 來(lái)部署和測(cè)試服務(wù),這種方法非常值得稱贊。它完全符合 K8s 的操作模式,為我們提供了一個(gè)接近生產(chǎn)環(huán)境的本地測(cè)試平臺(tái)。但是,大家可能也注意到了,這種方式存在一個(gè)效率瓶頸:每次進(jìn)行代碼更改后,都需要重新構(gòu)建 Docker 鏡像并部署到集群中,這一過(guò)程既耗時(shí)又影響開(kāi)發(fā)流程的連貫性。

作為開(kāi)發(fā)工程師,我們渴望的是一個(gè)極速的內(nèi)部開(kāi)發(fā)循環(huán),一個(gè)不再需要頻繁的 docker build、docker push 或繁瑣的部署流程,即使這些已經(jīng)完全自動(dòng)化。

我們希望能夠使用本地熟悉的開(kāi)發(fā)工具,如 VS Code 或者 IntelliJ IDEA 進(jìn)行本地調(diào)試,而不是先部署到集群環(huán)境,再通過(guò)日志來(lái)分析錯(cuò)誤這種遠(yuǎn)程調(diào)試模式。

從 Service 到 URL 的魔法變換

在不禁用 Webhook 的情況下,我們?cè)诒镜貑?dòng) controller 后會(huì)有如下錯(cuò)誤。這個(gè)比較好處理,我們只要使用自簽證書(shū),注入到 WebhookServer 即可,在前面的文章中我介紹過(guò)很多次,這里不再贅述。

2023-11-26T12:55:17+08:00       INFO    Stopping and waiting for webhooks
...
2023-11-26T12:55:17+08:00       INFO    Wait completed, proceeding to shutdown the manager
2023-11-26T12:55:17+08:00       ERROR   setup   problem running manager 
{"error": "open /var/folders/hn/v2s5bx...00000gn/T/k8s-webhook-server/serving-certs/tls.crt: 
no such file or directory"}
...

我們來(lái)運(yùn)行一個(gè)示例,想必下面這個(gè)錯(cuò)誤大家都非常熟悉吧,這個(gè)是因?yàn)?Webhook 注冊(cè)的地址'不對(duì)',它是集群內(nèi)的地址。

? kubectl apply -f ./config/samples
Error from server (InternalError): error when creating "config/samples/webapp_v1_guestbook.yaml": 
Internal error occurred: failed calling webhook "vguestbook.kb.io": failed to call webhook: 
Post "https://testing-webhooks-webhook-service.testing-webhooks-system.svc:443/validate-webapp-foobar-ai-v1-guestbook?timeout=10s": 
no endpoints available for service "testing-webhooks-webhook-service"

我們?cè)賮?lái)看下 ValidatingWebhookConfiguration 的配置。

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: testing-webhooks-validating-webhook-configuration
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: testing-webhooks-webhook-service
      namespace: testing-webhooks-system
      path: /validate-webapp-foobar-ai-v1-guestbook
      port: 443
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: vguestbook.kb.io
  rules:
  - ...
  ...

在這個(gè)配置中,webhooks 字段定義了一個(gè)或多個(gè)要注冊(cè)的 Webhook。每個(gè) Webhook 通過(guò) clientConfig 配置與 Kubernetes API 服務(wù)器的連接方式。

正如大家所看到的 https://testing-webhooks-webhook-service.testing-webhooks-system.svc:443/validate-webapp-foobar-ai-v1-guestbook,這個(gè)默認(rèn)地址其實(shí)就是 K8s 集群內(nèi)部的地址。這恰是 K8s 中處理 Webhook 的常規(guī)方法,其中 service 字段指向集群內(nèi)運(yùn)行的特定服務(wù)。

然而,在本地開(kāi)發(fā)環(huán)境中,我們只在本地運(yùn)行了我們的 Operator,直接使用內(nèi)部服務(wù)是不大可能的,因?yàn)樗?Webhook 服務(wù)必須部署在 K8s 集群中。

使用 kubectl explain 探索 Webhook 配置

當(dāng)我們?cè)?K8s 中配置 Webhook 時(shí),了解其配置細(xì)節(jié)是非常重要的。kubectl explain 是一個(gè)非常實(shí)用的小工具,它可以幫助我們深入理解 K8s 資源的各個(gè)屬性。

以 ValidatingWebhookConfiguration.webhooks.clientConfig 為例:

? kubectl explain ValidatingWebhookConfiguration.webhooks.clientConfig
GROUP:      admissionregistration.k8s.io
KIND:       ValidatingWebhookConfiguration
VERSION:    v1

FIELD: clientConfig <WebhookClientConfig>:

DESCRIPTION:
FIELDS:
     caBundle   <string>
     `caBundle` is a PEM encoded CA bundle which will be used to validate the
     webhook's server certificate. If unspecified, system trust roots on the
     apiserver are used.

     service    <ServiceReference>
     `service` is a reference to the service for this webhook. Either `service`
     or `url` must be specified.

     If the webhook is running within the cluster, then you should use `service`.

     url        <string>
     `url` gives the location of the webhook, in standard URL form
     (`scheme://host:port/path`). Exactly one of `url` or `service` must be
     specified.

通過(guò)以上提供的詳細(xì)信息,不難發(fā)現(xiàn) clientConfig 它除了通過(guò)定義 Service 讓 API 服務(wù)器連接到 WebhookServer 外,還有另外一種方式,那就是直接通過(guò) URL 連接。

為了解決這個(gè)問(wèn)題,我們可以將 Webhook 的配置從服務(wù)轉(zhuǎn)變?yōu)橹苯邮褂?URL。

使用 URL 連接 Webhook

通過(guò)將 clientConfig 中的 service 字段替換為 url 字段,我們可以指定 Webhook 服務(wù)的外部 URL。這樣一來(lái),開(kāi)發(fā)者可以在本地運(yùn)行 Webhook 服務(wù),并通過(guò)公開(kāi)的 URL 使其可被 Kubernetes API 服務(wù)器訪問(wèn)。

例如:

webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    url: https://testing-webhooks.loca.lt/validate-webapp-foobar-ai-v1-guestbook

這種方法使得在本地開(kāi)發(fā)環(huán)境中調(diào)試 Webhook 變得更加靈活和便捷。開(kāi)發(fā)者可以使用本地服務(wù)器或通過(guò)隧道(如 ngrok[1] 或 localtunnel[2])暴露的服務(wù),從而實(shí)現(xiàn)在本地環(huán)境中的有效調(diào)試。

事實(shí)上,我最初的首選是 ngrok,因?yàn)檫@玩意確實(shí)好用,它還有個(gè) localhost:4040 非常的實(shí)用,但遺憾的是,它的 tls 能力是付費(fèi)的。幸好,有很多平替工具可以選擇,比如 localtunnel,用起來(lái)也非常的方便。

步驟 1: 在我們的 main.go 需要接收一個(gè)證書(shū)路徑

...
var certDir string
flag.StringVar(&certDir, "webhook-cert-dir", "/tmp/k8s-webhook-server/serving-certs", "Admission webhook cert/key dir.")
...

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
    Scheme:                 scheme,
    Metrics:                metricsserver.Options{BindAddress: metricsAddr},
    HealthProbeBindAddress: probeAddr,
    WebhookServer: webhook.NewServer(webhook.Options{
        CertDir: certDir,
        Port:    9443,
    }),
    LeaderElection:   enableLeaderElection,
    LeaderElectionID: "dcc993a0.foobar.ai",
})

...

步驟 2:調(diào)整 Makefile,并啟動(dòng)我們的程序

修改 Makefile 文件,讓其可以接收證書(shū)目錄:

.PHONY: run
run: manifests generate fmt vet ## Run a controller from your host.
  go run ./cmd/main.go --webhook-cert-dir ./config/certs

啟動(dòng)程序:

? make run
...
go run ./cmd/main.go --webhook-cert-dir ./config/certs
2023-11-26T11:18:42+08:00       INFO    controller-runtime.builder      Registering a mutating webhook  {"GVK": "webapp.foobar.ai/v1, Kind=Guestbook", "path": "/mutate-webapp-foobar-ai-v1-guestbook"}
2023-11-26T11:18:42+08:00       INFO    controller-runtime.webhook      Registering webhook     {"path": "/mutate-webapp-foobar-ai-v1-guestbook"}
2023-11-26T11:18:42+08:00       INFO    controller-runtime.builder      Registering a validating webhook        {"GVK": "webapp.foobar.ai/v1, Kind=Guestbook", "path": "/validate-webapp-foobar-ai-v1-guestbook"}
2023-11-26T11:18:42+08:00       INFO    controller-runtime.webhook      Registering webhook     {"path": "/validate-webapp-foobar-ai-v1-guestbook"}
...
2023-11-26T11:18:42+08:00       INFO    controller-runtime.webhook      Starting webhook server
...
2023-11-26T11:18:42+08:00       INFO    controller-runtime.webhook      Serving webhook server  {"host": "", "port": 9443}
...

步驟 3:將本地主機(jī)服務(wù)器通過(guò)隧道公開(kāi)

# 安裝
npm install -g localtunnel

# 使用 lt 命令啟動(dòng)隧道
lt --port 9443 \
    --local-https \
    --local-ca $(pwd)/certs/ca.crt \
    --local-cert $(pwd)/certs/tls.crt \
    --local-key $(pwd)/certs/tls.key \
    --subdomain testing-webhooks
your url is: https://testing-webhooks.loca.lt

步驟 4:修改 ValidatingWebhookConfiguration 配置

我們將默認(rèn)的 service 服務(wù)。

webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: testing-webhooks-webhook-service
      namespace: testing-webhooks-system
      path: /validate-webapp-foobar-ai-v1-guestbook
      port: 443
...

替換換成 url 直連模式

webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    url: https://testing-webhooks.loca.lt/validate-webapp-foobar-ai-v1-guestbook
...

以上僅以 ValidatingWebhookConfiguration 為例,如果你的 controller 同時(shí)使用了 MutatingWebhookConfiguration,別忘了,處理方式是一樣的。

步驟 5:看看實(shí)際效果如何

最后,我們?cè)賵?zhí)行同樣一個(gè)用例,就可以被當(dāng)前的 ValidatingWebhook 攔截到了。

? kubectl apply -f ./config/samples/webapp_v1_guestbook.yaml
The Guestbook "guestbook-sample" is invalid: metadata.name: Invalid value: "guestbook-sample": 
Guestbook name must be no more than 5 characters for test purposes

?? 小貼士:對(duì)于那些出于安全考慮不愿將本地服務(wù)暴露在公網(wǎng)上的小伙伴們,這里有一個(gè)安全的替代方案。你可以使用如 docker.for.mac.host.internal 這樣的特定域名,它允許在不同環(huán)境下安全地連接到你的主機(jī)。

為了實(shí)現(xiàn)這一點(diǎn),你需要根據(jù)你所在的環(huán)境,將 docker.for.mac.host.internal 替換為能夠訪問(wèn)到你本地主機(jī)的相應(yīng)域名。此外,別忘了補(bǔ)充 caBundle 字段,確保使用了正確的 CA 證書(shū)的 base64 編碼字符串。

示例配置如下所示:

webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    caBundle: [你的CA證書(shū)的base64編碼字符串]
    url: https://docker.for.mac.host.internal:9443/validate-webapp-foobar-ai-v1-guestbook

當(dāng)然,在實(shí)際開(kāi)發(fā)中,手動(dòng)更改 Webhook 配置顯然不是理想選擇。推薦大家根據(jù)項(xiàng)目需求,結(jié)合這里提供的策略,開(kāi)發(fā)自動(dòng)化的配置處理流程。這不僅提升效率,還確保了配置的準(zhǔn)確性和項(xiàng)目的靈活性。

Debugging operator on Kubernetes

在以前的舊文中,我分享過(guò) 《Kubernetes 101: Debugging Microservices on Kubernetes》 這篇文章,主要介紹微服務(wù)在 K8s 環(huán)境下,在本地如何進(jìn)行有效的調(diào)試。事實(shí)上,我們當(dāng)前 webhook 的調(diào)試場(chǎng)景,完全可以利用 Nocalhost[3] 這款工具達(dá)到同樣的目的。

圖片圖片

在 Nocalhost 的開(kāi)發(fā)模式下,我們可以直接在 K8s 集群中構(gòu)建、測(cè)試和調(diào)試應(yīng)用程序的,這意味著我們可以默認(rèn)使用 clientConfig.service 模式,直接通過(guò)內(nèi)部服務(wù)來(lái)連接,非常的方便。如果你還不太熟悉 Nocalhost,那可得抓緊時(shí)間補(bǔ)課了 ??

至于證書(shū),我們自然是選擇 cert-manager 來(lái)管理 admission webhooks 證書(shū)了,畢竟我們已經(jīng)在集群里運(yùn)行了,沒(méi)有比它更方便的了。

我在 github 上寫(xiě)了個(gè) chart,感興趣的可以了解下:https://github.com/lqshow/testing-webhooks

寫(xiě)在最后

在本文中,我們深入了解了 Kubernetes Webhook 的本地調(diào)試流程,從基礎(chǔ)理解到實(shí)際操作。通過(guò)將傳統(tǒng)的基于服務(wù)的配置方式轉(zhuǎn)變?yōu)橹苯邮褂?URL,我們不僅克服了本地調(diào)試的局限性,還引入了前所未有的靈活性和效率,大幅優(yōu)化了整個(gè)開(kāi)發(fā)周期。

此外,我們還探討了如何在更廣泛的 Kubernetes 生態(tài)中應(yīng)用 Nocalhost 和 cert-manager。這些工具的整合不僅簡(jiǎn)化了開(kāi)發(fā)和調(diào)試過(guò)程,還強(qiáng)化了安全性和可擴(kuò)展性。通過(guò)實(shí)際案例,我們展示了如何在云原生環(huán)境中靈活地應(yīng)對(duì)挑戰(zhàn),從而提升整體開(kāi)發(fā)效率。

責(zé)任編輯:武曉燕 來(lái)源: Cloud Native 101
相關(guān)推薦

2019-08-13 09:06:20

開(kāi)發(fā)Webhook命令

2023-12-04 08:26:42

CLI工具

2021-11-29 05:32:59

Windows 11操作系統(tǒng)微軟

2022-08-12 11:46:50

Kubernetes云原生開(kāi)源

2022-04-18 09:58:17

云原生Kubernetes

2018-03-25 08:44:07

iPhonePDF網(wǎng)頁(yè)

2020-01-03 14:03:46

云計(jì)算開(kāi)發(fā)云原生

2013-11-28 09:40:23

OS X技巧

2020-06-17 08:48:22

JavaScript開(kāi)發(fā)技術(shù)

2023-11-07 07:44:55

云原生OrbStackDNS

2019-05-16 14:09:03

容器技巧開(kāi)發(fā)

2024-02-28 08:13:32

2019-07-12 16:28:32

MacKubernetes

2012-08-27 10:32:12

2022-06-23 06:42:06

CSSJS 監(jiān)聽(tīng)

2023-01-31 17:42:06

2023-02-10 07:39:58

云原生KubernetesCRD

2023-07-10 12:11:50

TypeScripChrome識(shí)別

2021-03-30 11:33:45

云計(jì)算微服務(wù)云應(yīng)用

2013-08-21 09:35:19

Vistual Stu調(diào)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

www.久久网| 精品无人区无码乱码毛片国产| 最新国产在线拍揄自揄视频| caoporen国产精品视频| 国产精品2018| 在线免费观看亚洲视频| 欧美天堂影院| 正在播放亚洲一区| 男人日女人bb视频| 黄色在线免费| 91论坛在线播放| 91人成网站www| 伦av综合一区| 欧美日韩岛国| 中文字幕亚洲无线码a| 日批免费观看视频| 国产一区二区三区影视| 亚洲最色的网站| 亚洲精品影院| 欧美精品久久久久久久久久丰满| 性一交一乱一伧老太| 五月激情综合| 亚洲人成伊人成综合网久久久| 日本一二三区在线| 免费高清视频在线一区| 亚洲一区视频在线| 小说区视频区图片区| 黄色大片在线看| www.亚洲在线| 99精品国产一区二区| 欧美一区免费看| 亚洲黄色天堂| 欧美成人激情视频| 任我爽在线视频| 狠狠色狠狠色综合婷婷tag| 精品国产乱码久久久久久久| 国产传媒免费观看| 成人mm视频在线观看| 黑人巨大精品欧美一区二区三区 | 樱桃视频在线观看一区| 亚洲第一导航| 成人全视频高清免费观看| 9人人澡人人爽人人精品| 999视频在线免费观看| 97caocao| 久久97超碰色| 国产热re99久久6国产精品| 在线观看 亚洲| 性伦欧美刺激片在线观看| 亚洲3p在线观看| 久久久久久久久久一区二区三区 | 国产午夜精品一区二区三区四区| 久久精品国产综合精品| 偷拍精品一区二区三区| av一本久道久久综合久久鬼色| 成人资源视频网站免费| 草逼视频免费看| 丰满少妇久久久久久久| 国产精品久久久久久久久久久久冷 | 成年人网站免费看| 在线日韩一区| 国产亚洲欧洲高清一区| 国产一二三四视频| 91综合在线| 久久五月天综合| 精品97人妻无码中文永久在线| 欧美日本精品| 97视频在线观看免费| 在线观看日本视频| 另类的小说在线视频另类成人小视频在线| 国产精品久久久久久亚洲影视| 成人免费一区二区三区| 黑人巨大精品欧美黑白配亚洲| 亚洲va欧美va国产综合久久| 精品国自产在线观看| 成人免费看黄yyy456| 欧美黑人xxxxx| 成人77777| 亚洲综合色区另类av| 少妇高潮毛片色欲ava片| 成人在线爆射| 日韩欧美一区在线观看| 亚洲欧美日本一区| 日韩dvd碟片| 久久久久久久999| 久久国产视频一区| 久久99久久精品欧美| 国产精品v欧美精品v日韩| 青青久在线视频| 亚洲人成网站在线| 欧美老熟妇喷水| 青娱乐极品盛宴一区二区| 精品国产网站在线观看| 无码少妇精品一区二区免费动态| 我不卡手机影院| 人体精品一二三区| 99久久国产免费| 2020国产精品| 日韩精品一区二区三区四 | 91精品久久久久久久久久久久久久| 国产福利资源在线| 国产视频一区二区在线| 人妻激情另类乱人伦人妻| 免费观看成人性生生活片| 日韩欧美一二三四区| 国产特级黄色录像| 激情婷婷亚洲| 国产视频999| 你懂的免费在线观看视频网站| 亚洲欧美精品午睡沙发| 日本成人黄色网| 欧美变态网站| 久久99青青精品免费观看| 波多野结衣大片| 99re视频这里只有精品| 国产女主播av| av日韩一区| 亚洲最大中文字幕| 800av免费在线观看| 丁香啪啪综合成人亚洲小说 | 激情aⅴ欧美一区二区欲海潮| 制服视频三区第一页精品| 最近中文字幕免费| 在线亚洲国产精品网站| 国产99视频精品免费视频36| 看女生喷水的网站在线观看| 在线观看视频一区| 中文字幕人妻一区二区| 国产欧美日韩一级| 国产综合18久久久久久| 丁香花视频在线观看| 91精选在线观看| 蜜桃视频最新网址| 麻豆91小视频| 亚洲成色最大综合在线| 日韩中文在线播放| 国产午夜精品免费一区二区三区| 国产成人精品网| 成人av先锋影音| 日本xxxxxxxxxx75| 日韩精品三级| 色综合色综合久久综合频道88| 国产精品久久影视| 一区在线播放视频| 网站在线你懂的| 夜间精品视频| 成人免费在线一区二区三区| 手机av免费在线| 精品国产污污免费网站入口| 国产奶水涨喷在线播放| av电影一区二区| 国产在线青青草| 日韩av网站在线免费观看| 欧美一区在线直播| 精品视频一二三| 欧美性色黄大片| www.99re6| 国产乱色国产精品免费视频| 国产91在线亚洲| 久久丝袜视频| 国产精品久久91| 男人资源在线播放| 日韩一区二区在线看| 久草视频免费播放| 91蜜桃网址入口| 国产超碰在线播放| 中文字幕一区二区av| 成人羞羞视频免费| 在线毛片观看| www日韩欧美| www.色视频| 欧美色xxxx| 任我爽在线视频| 成人午夜碰碰视频| 亚洲精品中文字幕无码蜜桃| 婷婷综合亚洲| 久久综合久久久| 亚洲国产伊人| 国模视频一区二区| 高清在线观看av| 日韩美女在线视频| 人妻丰满熟妇av无码区| 一区在线观看免费| 亚洲色图14p| 国内久久精品视频| 人妻熟妇乱又伦精品视频| 99久久夜色精品国产亚洲1000部| www.成人av| 性欧美freehd18| 欧美激情欧美激情在线五月| 国产一二在线观看| 精品欧美黑人一区二区三区| 亚洲天堂五月天| 亚洲激情五月婷婷| 国产又大又粗又爽的毛片| 国产一区二区免费视频| 青青在线视频观看| 中文字幕免费一区二区三区| 欧美久久在线| 日韩精品视频在线看| 国产成人黄色av| 草草影院在线| 久久中文久久字幕| 久久国产精品高清一区二区三区| 欧美一级理论片| 91丨九色丨海角社区| 天天av天天翘天天综合网 | 精品视频1区2区3区| 日本一二三区视频| 亚洲日本在线看| 2019男人天堂| 久久久久久久久岛国免费| 97中文字幕在线观看| 久久99久久99精品免视看婷婷| 中文字幕无码精品亚洲35| 欧美69视频| 中文字幕乱码一区二区三区| 国产一区日韩| 免费成人深夜夜行视频| 电影一区二区在线观看| 99re资源| 91精品一区| 国产精品综合网站| 久久99久久99精品免观看软件| 97免费中文视频在线观看| 日本孕妇大胆孕交无码| 久久婷婷国产麻豆91天堂| 免费看美女视频在线网站| 在线看福利67194| 玖玖精品在线视频| 91传媒理伦片在线观看| 韩国理伦片一区二区三区在线播放| 欧美精品第三页| 奶水喷射视频一区| jizzjizz国产精品喷水| 在线 亚洲欧美在线综合一区| 米仓穗香在线观看| 欧美淫片网站| 黄色一级大片免费| 欧美欧美天天天天操| 黄色一级片黄色| 国内自拍一区| 国产精品无码电影在线观看| 国产伊人精品| 国产真实老熟女无套内射| 欧美三级第一页| 性高湖久久久久久久久aaaaa| 韩日欧美一区| 男女啪啪免费视频网站| 亚洲一级高清| 日本网站免费在线观看| 久久精品九九| 一道本在线免费视频| 精品一二三四区| a级大片免费看| 国产一区在线观看视频| 中文字幕亚洲日本| av电影天堂一区二区在线| brazzers精品成人一区| 国产欧美日本一区视频| 国产农村妇女精品一区| 中文字幕一区二区三区蜜月| 久久久久久久久毛片| 亚洲国产一区视频| 中文字幕第15页| 欧美性色黄大片| www.爱爱.com| 日韩精品视频三区| 波多野结衣一区二区| 久久亚洲精品国产亚洲老地址| 日韩123区| 日本aⅴ大伊香蕉精品视频| 日韩中文视频| 99国产高清| 色综合中文网| 潘金莲一级淫片aaaaa免费看| 亚洲精品男同| 女人另类性混交zo| 另类调教123区 | 国产精品视频一区二区三区综合| 亚洲综合自拍一区| 欧洲亚洲一区二区三区| 亚洲精品免费在线看| 欧美网站在线| 国产欧美高清在线| 国产一本一道久久香蕉| 免费中文字幕av| 综合电影一区二区三区 | 日本大胆在线观看| 日本一区二区在线免费播放| 国产高清亚洲| 免费国产一区二区| 欧美日韩四区| 天天干天天干天天干天天干天天干| 国产福利一区二区三区在线视频| 老司机福利av| 一区二区三区免费| 国产女主播喷水视频在线观看 | 天堂а√在线中文在线鲁大师| 亚洲成年人影院| 在线观看黄色国产| 日韩成人中文电影| 91麻豆免费在线视频| 国产精欧美一区二区三区| 99re8这里有精品热视频免费 | 91精品国产色综合久久不卡蜜臀| 手机看片1024日韩| 久久精品亚洲精品| 少妇视频在线观看| 96久久精品| 久久视频在线| 国产成人久久婷婷精品流白浆| 丁香婷婷深情五月亚洲| 色哟哟一一国产精品| 欧美午夜不卡视频| 四虎在线免费观看| 欧美精品videos| 自拍偷拍欧美日韩| 日韩av电影免费在线观看| 亚洲激情女人| 欧美xxxxx少妇| 亚洲一区在线观看视频| 国产精品高潮呻吟av| 综合激情国产一区| 欧美亚洲大片| 欧美日韩一区综合| 欧美亚洲免费| 性欧美丰满熟妇xxxx性仙踪林| 亚洲成人av福利| 天堂中文网在线| 国产+人+亚洲| 好吊妞视频这里有精品| xxxxxx在线观看| 国产精品自拍网站| 日韩高清dvd碟片| 欧美精品xxxxbbbb| 毛片免费不卡| 91亚洲一区精品| 先锋资源久久| 黄色一级片免费播放| 亚洲欧美国产77777| 国产伦精品一区二区三区四区| 日韩在线观看免费高清完整版| av成人免费看| 亚洲午夜精品久久久久久浪潮| 蜜臀99久久精品久久久久久软件 | 亚洲猫色日本管| 国产wwwxxx| 欧美国产日本在线| 红杏一区二区三区| 欧美亚洲另类色图| 久久美女艺术照精彩视频福利播放| 国产无遮挡呻吟娇喘视频| 亚洲精选一区二区| 国产韩日精品| 在线观看视频黄色| 丁香婷婷综合色啪| 好看的av在线| 在线视频欧美日韩精品| 外国成人毛片| 青青在线视频免费观看| eeuss鲁片一区二区三区在线观看 eeuss影院一区二区三区 | 色先锋久久影院av| 亚洲少妇第一页| 日韩一区在线看| 噜噜噜久久,亚洲精品国产品| 欧美一级片在线播放| 精品国产一区二区三区噜噜噜| 男生操女生视频在线观看| 一区二区三区在线视频免费观看| 亚洲美女福利视频| 日本午夜人人精品| 99精品视频在线| 国产a级片视频| 五月天久久比比资源色| 精品成人一区二区三区免费视频| 国产精品男人爽免费视频1| 91超碰成人| 女人被狂躁c到高潮| 欧美三级在线看| 91美女主播在线视频| 日韩免费中文专区| 国产精品99久久久久久似苏梦涵 | 自拍偷拍一区二区三区| 成人av电影在线观看| 在线观看国产黄| 亚州成人av在线| 天天综合网91| 国产麻豆天美果冻无码视频| 在线成人午夜影院| 人在线成免费视频| 男人天堂成人网| 久久久精品人体av艺术| 99热这里只有精品9| 国产99久久久欧美黑人 | 91av在线免费观看| 久久久9色精品国产一区二区三区| 一起草在线视频| 欧美一二三四在线| 国产精品久久久久久久久免费高清 |