精品欧美一区二区三区在线观看 _久久久久国色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)

日本韩国一区二区| 激情综合电影网| 日本高清不卡aⅴ免费网站| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 精品日韩av| 久久综合久久综合久久| 91视频免费网站| 午夜影院在线看| 欧美高清视频手机在在线| 日韩美一区二区三区| 国产h视频在线播放| va婷婷在线免费观看| 久久精品人人| 九九九久久久久久| 人妻精品久久久久中文| 亚洲欧美日本国产| 欧美三片在线视频观看 | av网站免费在线观看| 91蜜桃在线观看| 91香蕉国产在线观看| 久久99国产综合精品免费| 欧美va天堂| 精品视频久久| 亚洲另类色综合网站| 欧美精品一区在线发布| 精品人妻一区二区三区麻豆91 | 激情亚洲另类图片区小说区| 欧美性生活影院| 人妻少妇精品无码专区二区| 国产一二区在线| 国产蜜臀97一区二区三区| 国产精品久久久久久久久久久久午夜片| 国产在线一级片| 国产精品综合| 午夜剧场成人观在线视频免费观看| 久草手机视频在线观看| 欧美日韩激情| 亚洲男人天堂网| 国产亚洲色婷婷久久99精品91| 欧美激情精品| 67194成人在线观看| 亚洲黄色av网址| 日韩影片中文字幕| 狠狠久久亚洲欧美专区| 国产av国片精品| 先锋影音在线资源站91| 亚洲丝袜另类动漫二区| 一区二区三视频| av免费在线一区二区三区| 久久精品人人做人人爽97| 久久另类ts人妖一区二区| 日日夜夜精品免费| 成人一区二区三区视频在线观看| 亚洲在线免费看| 国产一区二区小视频| 久久99热这里只有精品| 国产精品第10页| 久草视频在线免费| 免费观看成人av| 清纯唯美日韩制服另类| 中文字幕免费观看| 日本大胆欧美人术艺术动态 | 中文字幕永久在线| 老牛影视一区二区三区| 国产成人精品视频| 国产精品成人久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品成人v| 伊人久久成人网| 国产在线播放一区二区三区| 亚洲中国色老太| 成人久久精品人妻一区二区三区| 成人性生交大片免费看视频在线| 国产伦精品一区二区三区免费视频| 欧美 日韩 中文字幕| 99久久99久久精品免费观看| 久久综合福利| 成人动漫在线免费观看| 日韩一区在线免费观看| 17c丨国产丨精品视频| 91高清视频在线观看| 色综合欧美在线| 污污的网站18| 99re8这里有精品热视频免费| 精品sm捆绑视频| 国产精品密蕾丝袜| 伊人久久大香线蕉综合四虎小说| 国语自产精品视频在线看抢先版图片| 男人日女人网站| 极品少妇一区二区三区精品视频| 国产另类自拍| 成人高清免费在线播放| 一区二区成人在线观看| 麻豆传传媒久久久爱| 亚洲日日夜夜| 国产成人手机高清在线观看网站| 色综合久久综合| 亚洲成人福利在线| 激情视频极品美女日韩| 搡老女人一区二区三区视频tv| 欧美三级 欧美一级| 久久精品一区二区国产| 亚洲精品日产aⅴ| 欧美日韩伦理片| 亚洲欧洲综合另类| 狠狠操精品视频| 老司机亚洲精品一区二区| 精品视频偷偷看在线观看| 日韩成人短视频| 久久一区中文字幕| 国产精品区免费视频| av男人的天堂在线| 黑丝美女久久久| 欧美高清精品一区二区| 成人高清电影网站| 45www国产精品网站| 国产日韩欧美中文字幕| 国产视频在线观看一区二区三区| 香港三级日本三级a视频| 国产亚洲精品精品国产亚洲综合| 精品爽片免费看久久| 欧美精品久久久久性色| 激情综合网av| 日韩性感在线| 成人免费看视频网站| 亚洲成人激情在线观看| 青青草原国产视频| 久久国产精品色| 日韩影片在线播放| 亚洲精品国产精品国产| 亚洲国产成人一区| 久久精品www人人爽人人| 国产在线看一区| 在线观看日韩羞羞视频| 成人四虎影院| 亚洲性69xxxbbb| 天干夜夜爽爽日日日日| 26uuu色噜噜精品一区| youjizz.com在线观看| www.com亚洲| 日韩理论电影| 国产精品精品国产| 国产在线观看高清视频| 欧美视频中文在线看| 91玉足脚交白嫩脚丫| 亚洲一级黄色| 激情视频在线观看一区二区三区| 波多野结衣乳巨码无在线观看| 精品伦理精品一区| 国产精品111| 99精品在线免费| 国产视频九色蝌蚪| 天海翼亚洲一区二区三区| 韩国三级电影久久久久久| 天堂国产一区二区三区| 午夜影院久久久| 免费的av网站| 日韩精品免费专区| 视频在线99re| 色婷婷成人网| 欧美成人sm免费视频| 亚洲av无码国产精品永久一区 | 久久久久99精品| 成人综合婷婷国产精品久久 | 青青青视频在线免费观看| 麻豆中文一区二区| 一区二区在线不卡| 激情久久免费视频| 欧美激情精品久久久久久免费印度 | 超碰97国产精品人人cao| 亚洲国产精品免费| 欧美一区二区三区久久久| 国产精品少妇自拍| 亚洲18在线看污www麻豆| 欧美黄色大片网站| 久久久久久99| 久久久加勒比| 欧美黑人xxxx| 蜜桃免费在线| 欧美精品一二三| 国产午夜福利片| 国产肉丝袜一区二区| 亚洲制服中文字幕| 亚洲精品1区2区| 天堂√在线观看一区二区| 精品国产一区二区三区2021| 97久久精品在线| 97超碰人人在线| 亚洲成人国产精品| 中文字幕欧美人妻精品| 亚洲一区二区四区蜜桃| 一区二区三区伦理片| 国产福利91精品一区| 干日本少妇首页| 久久久久国产| 欧美理论一区二区| 亚洲综合影院| 国产精品欧美风情| av在线不卡免费| 日韩一区二区三区xxxx| 色wwwwww| 欧美一三区三区四区免费在线看 | 国产精品天天干| 国产精品亚洲а∨天堂免在线| 97超碰青青草| 欧美伊人影院| 日本婷婷久久久久久久久一区二区 | 天天做天天爱综合| 久久久久久99| 日本超碰一区二区| 国产精品毛片a∨一区二区三区|国| 欧美大片黄色| 久久久国产精彩视频美女艺术照福利| 四虎电影院在线观看| 日韩视频免费直播| ,一级淫片a看免费| 日韩欧美成人区| 国产乡下妇女做爰| 亚洲精品日韩一| 很污很黄的网站| 国产亚洲精品超碰| 人妻丰满熟妇av无码久久洗澡| 国产福利91精品| aaaaaaaa毛片| 久久aⅴ国产欧美74aaa| 亚洲一区二区三区四区五区xx| 小嫩嫩精品导航| a级黄色小视频| 亚洲无吗在线| 台湾无码一区二区| 欧美国产免费| 久久亚洲a v| 欧美一区亚洲| 日韩精品福利片午夜免费观看| 99久精品视频在线观看视频| 色综合久久88色综合天天提莫| 奇米狠狠一区二区三区| 久久国产精品99久久久久久丝袜| 高清一区二区三区| 国产伦精品一区二区三区| 8848成人影院| 国产精品毛片一区视频| av男人一区| 成人三级视频在线观看一区二区| 玖玖玖视频精品| yellow视频在线观看一区二区 | 久久综合入口| 欧美中文一区| 久久久久网址| 国产成人精品免费视| 日产精品高清视频免费| 成人一区二区| 在线国产精品网| 一级毛片免费高清中文字幕久久网| 最新中文字幕久久| 欧美黄色一区| 日韩欧美一区二| 羞羞答答国产精品www一本| 免费在线激情视频| 视频一区二区三区中文字幕| 国内自拍视频一区| 麻豆极品一区二区三区| 三级黄色片播放| 福利电影一区二区三区| 黄色在线观看av| 国产三级久久久| 久久人妻无码aⅴ毛片a片app | 亚洲男人的天堂在线视频| 黑人巨大精品欧美一区二区三区| 91视频在线视频| 欧美一区二区三区视频在线观看| 高h调教冰块play男男双性文| 日韩av中文在线| 成人在线免费电影| 久热精品视频在线观看| 91福利在线免费| 国产精品v片在线观看不卡| 白嫩亚洲一区二区三区| 国产一区二区自拍| 精品视频国产| 日韩成人三级视频| 免费人成黄页网站在线一区二区| 毛片毛片毛片毛片毛| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲一区导航| 国产精品嫩草在线观看| 青青草原综合久久大伊人精品 | 国产激情一区二区三区在线观看 | 精品视频偷偷看在线观看| 日本激情在线观看| 97久久精品人人澡人人爽缅北| 成人精品一区二区三区电影| 国产精品午夜av在线| 欧美综合在线视频观看 | 奇米亚洲午夜久久精品| 日韩高清一二三区| 亚洲国产精品成人综合色在线婷婷 | 人人狠狠综合久久亚洲婷| 18视频在线观看娇喘| 久久久久国产精品一区二区| av在线网站免费观看| 久久久午夜精品| 青青草免费av| 欧美无人高清视频在线观看| 欧美一区二不卡视频| 伦伦影院午夜日韩欧美限制| 在线成人av观看| 成人h在线播放| 97视频热人人精品免费| 久久久久免费精品| 成人激情视频网站| 亚洲欧美精品aaaaaa片| 一本到高清视频免费精品| 蜜桃视频污在线观看| 美日韩在线视频| 欧美xxxx网站| 日韩免费av电影| 午夜一级在线看亚洲| 亚洲成人福利视频| 日韩毛片视频在线看| 中文字幕一区二区在线视频 | av在线免费网址| 国产精品麻豆va在线播放| 美女精品一区最新中文字幕一区二区三区| 黄色一级片av| 狠狠v欧美v日韩v亚洲ⅴ| 黄大色黄女片18免费| 色欧美日韩亚洲| 欧美套图亚洲一区| 4388成人网| 欧美一级色片| 午夜精品久久久久久久无码| 成人国产一区二区三区精品| 青青草手机视频在线观看| 日韩一区二区在线观看视频播放| 日本中文字幕在线视频| 国产玖玖精品视频| 97国产成人高清在线观看| 动漫av免费观看| 中文字幕成人av| 91丨九色丨海角社区| 中文字幕av一区二区| 精品久久久网| 中文字幕一区二区三区在线乱码 | 精品福利视频导航| 四虎免费在线观看| 77777少妇光屁股久久一区| 国产女人18毛片水真多18精品| 国产女主播自拍| 91在线视频观看| 一级成人黄色片| 中文字幕精品网| 99综合久久| 女人被男人躁得好爽免费视频| 福利电影一区二区三区| 国产成人精品片| 亚洲欧美日韩天堂一区二区| 日本一区二区电影| 美女黄色片网站| 成人丝袜视频网| 日韩在线视频不卡| 揄拍成人国产精品视频| 国产精品777777在线播放| 国产传媒久久久| 久久综合网色—综合色88| 中国a一片一级一片| 久久在线精品视频| 丁香综合av| 欧美性猛交久久久乱大交小说| 中文字幕亚洲在| www.久久成人| 欧美亚洲成人xxx| 久久精品国产68国产精品亚洲| 亚洲综合123| 午夜精彩视频在线观看不卡| 国产中文字幕在线看| 成人h片在线播放免费网站| 韩日欧美一区| 国产又粗又猛又爽视频| 91精品国产综合久久蜜臀| 日本乱码一区二区三区不卡| 色婷婷精品国产一区二区三区| 国产精品一级在线| 国产农村妇女aaaaa视频| 久热精品视频在线观看| 香蕉视频一区| 日韩精品视频网址| 日韩欧美在线视频免费观看| 色老头视频在线观看| 国产亚洲精品自在久久| 美女在线视频一区| 久久久精品视频免费| 色小说视频一区| 国产精品对白久久久久粗| 中文久久久久久| 亚洲第一狼人社区| 黄色精品免费看| 欧美性xxxx69| 国产成人欧美日韩在线电影| 亚洲男人天堂网址|