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

Docker容器構建優秀實踐

安全 云安全
本文介紹我們給大家介紹了一套總結了業界實踐的容器的優秀實踐。目的是讓容器構建更加快速,更安全,也更具彈性。本文假設讀者有一定Docker和Kubernetes了解,但也可以單獨作為Docker容器構建守則。

在容器和虛擬化廣泛流行的今天,如何構建出一個安全、潔凈的容器是大家都關心的問題。和安全領域對系統的要求一樣"只安裝必須的應用"的最小化原則也是容器構建的基本法則。一方面最小化的應用可以減小鏡像的大小,節省上傳下載的時間,同時減少了容器中的應用也就減少了可入侵點,使容器更安全。本文介紹我們給大家介紹了一套總結了業界實踐的容器的優秀實踐。目的是讓容器構建更加快速,更安全,也更具彈性。本文假設讀者有一定Docker和Kubernetes了解,但也可以單獨作為Docker容器構建守則。

一個容器一個應用程序

當開始使用容器時,常見的一個誤區是把容器當成虛擬機來使。這樣做往往會讓他們不能輕易滿足某些需求而非常痛苦,同時也背離了容器的最大優勢點。很多初學者在群里問了很多為么:為什么Docker不能aaa?怎么實現Docker bbb?然后他需要的答案其實上只是需要一個虛擬。雖然現代容器已經可以滿足這些需求,但是這會極大減弱容器模型的大多數優點。以經典的Apache/MySQL/PHP堆棧為例,你可能很想在一個容器中運行所有組件。但是,最佳實踐是使用兩個或三個不同的容器:Apache容器,MySQL容器,和運行PHP-FPM的php容器。

由于容器設計思想是容器和托管的應用程序具有相同的生命周期,因此每個容器應當只包含一個應用程序。當容器啟動時,應用程序隨之啟動,當容器停止時,應用也會停止。

容器如果部署了多個應用,則它們有可能具有不同的生命周期或處于不同的狀態。例如,一個正在運行的容器,但其核心組件之一突然崩潰或無響應。由于沒有額外的運行狀況檢查,整個容器管理系統(Docker或Kubernetes)將無法判斷容器是否健康。在Kubernetes集群中,容器默認是不會重啟的。

有些公共鏡像中可能會使用如下有一些的操作,但不遵循原則:

使用進程管理系統(比如supervisor)來管理容器中的一個或多個應用。使用bash腳本作為容器中的入口點,并使其產生多個應用程序作為后臺作業。

信號處理,PID 1和僵尸進程

Linux信號是控制容器內進程生命周期的主要方法。為了與前一條最佳實踐保持一致,為了將應用程序的生命周期和容器關連,請確保應用程序能夠正確處理Linux信號。其中最重要的一個Linux信號是SIGTERM,因為它用來終止進程。應用可能還會收到SIGKILL信號,用于非正常地終止進程,或者SIGINT信號,用于接受,鍵入的Ctrl + C指令。

進程標識符(PID)是Linux內核為每個進程提供的唯一標識符。 PID具有名稱空間,容器具有自己的一組PID,這些PID會被映射到宿主機系統的PID。Linux內核啟動時會創建第一個進程具有PID1。用來init系統用來管理其他進程,比如systemd或SysV。同樣,容器中啟動的第一個進程也是PID1。Docker和Kubernetes使用信號與容器內的進程進行通信。Docker和Kubernetes都只能向容器內具有PID 1的進程發送信號。

在容器環境中,需要考慮兩個PIDs和Linux信號的問題。

Linux內核如何處理信號?

Linux內核處理PID 1的進程方式與對其他進程不同。PID1,不會自動注冊信號量SIGTERM,所以SIGTERM或SIGINT默認對PID 1無效。默認必須使用SIGKILL信號來殺掉進程,無法優雅的關閉進程,可能會導致錯誤,監視數據寫入中斷(對于數據存儲)以及一些不必要的告警。

典型的初始化系統如何處理孤立進程?

典型的初始化系統(例如systemd)也用被用來刪除(捕獲)孤立的僵尸進程。僵尸進程(其父進程已死亡的進程)將會被附加到具有PID 1的進程下,被其捕獲關閉。但是在容器中,需要映射到容器PID 1的進程來處理。如果該進程無法正確處理,則可能會出現內存不足或其他資源不足的風險。

面對這些問題有幾種常見的解決方案:

1. 以PID 1運行并注冊信號處理程序

該方案用來解決第一個問題。如果應用以受控方式生成子進程(通常是這種情況)是有效的,可以避免第二個問題。最簡單方法是在Dockerfile中使用CMD和/或ENTRYPOINT指令啟動你的進程。例如,下面的Dockerfile中,nginx是第一個也是唯一要啟動的進程。

  1. FROM debian:9  
  2. RUN apt-get update && \  
  3. apt-get install -y nginx  
  4. EXPOSE 80  
  5. CMD [ "nginx", "-g", "daemon off;" ] 

注意:Nginx進程注冊其自己的信號處理程序。使用此解決方案,在許多情況下,你必須在應用程序代碼中執行相同的操作。

有時可能需要準備容器中的環境以使進程正常運行。在這種情況下,最佳實踐是讓容器在啟動時運行shell初始化腳本。該Shell腳本的用來配置所需的環境并啟動主要進程。但是,如果采用這種方法,則shell腳本擁有PID 1,這就是為什么必須使用內置exec命令從shell腳本啟動進程的原因。exec命令將腳本替換為所需的程序,進程將繼承PID 1。

2. 在Kubernetes中啟用進程名稱空間共享

為Pod啟用進程名稱空間共享時,Kubernetes對該Pod中的所有容器使用單個進程名稱空間。 Kubernetes Pod基礎容器成為PID 1,并自動捕獲孤立的進程。

3. 使用專門的初始化系統

就像在更經典的Linux環境中一樣,也可以使用init系統來解決這些問題。但是,如果用于這個目的,普通的初始化系統(例如systemd或SysV)太復雜且太重,建議使用專門的容器創建的初始化系統(例如tini)。

如果使用容器專用的初始化系統,則初始化進程具有PID 1,并執行以下操作:

  • 注冊正確的信號處理程序。
  • 確保信號對你的應用程序有效。
  • 捕獲所有僵尸進程。

可以通過使用docker run命令的--init選項在Docker中使用此解決方案。要在Kubernetes中使用,則必須在容器鏡像中先安裝init系統,并將其用作容器的入口。

優化Docker構建緩存

Docker的構建緩存可以極大的加速容器鏡像的構建。在容器系統中鏡像是逐層構建的,在Dockerfile中,每條指令都會在鏡像中創建一個層。在構建期間,如果可能,Docker會嘗試重用先前構建中一層,盡可能跳過其底層來減少構建消耗成本的步驟。Docker只有在所有先前的構建步驟都使用它的情況下,才能使用其構建緩存。盡管這種做法通常使構建更快,但需要考慮一些情況。

例如,要充分利用Docker構建緩存,必須將需要經常更改的構建步驟放在Dockerfile的后面。如果將它們放在前面,則Docker無法將其構建緩存用于其他更改頻率較低的構建步驟。通常為源代碼的每個新版本構建一個新的Docker鏡像,所以應盡可能在Dockerfile的后面將源代碼添加到鏡像。如下圖,你可以看到,如果要更改了STEP 1,則Docker只能重用FROM FROM debian:9步驟中的層。但是,如果更改STEP 3,則Docker可以將這些層重新用于STEP 1和STEP 2。

圖中藍色表示可以重用的層,紅色表示必須重建的層。層的重用原則導致另一個后果,如果構建步驟依賴于存儲在本地文件系統上的任何類型的緩存,則該緩存必須在同一構建步驟中生成。如果未生成此緩存,則可能會使用來自先前構建的過期的緩存來執行的構建步驟。通過apt或yum等程序包管理器中最常有這個問題,必須在一個RUN命令中同時安裝所有必須要的庫。如果更改下面Dockerfile中的第二個RUN步驟,則不會重新運行apt-get update命令,從而導致過期的apt緩存。

  1. FROM debian:9  
  2. RUN apt-get update  
  3. RUN apt-get install -y nginx 

而是,在單個RUN步驟中合并兩個命令:

  1. FROM debian:9  
  2. RUN apt-get update && \  
  3. apt-get install -y nginx 

刪除不必要的工具

為了保護你的應用免受攻擊者的侵害,請嘗試通過刪除所有不必要的工具來減少應用的攻擊面。例如,刪除諸如netcat之類的實用程序,因為可以用necat隨便就能構建一個反向shell。如果容器中不安裝netcat,則攻擊者無法這樣簡單利用。

即使沒有容器化,此最佳實踐也適用于任何工作負載。區別在于,與經典虛擬機或裸機服務器相比,使用容器實現起來要容易得多。

其中一些工具可能對于調試有用。例如,如果你將此最佳實踐推得足夠遠,那么詳盡的日志,跟蹤,概要分析和應用程序性能管理系統將成為必不可少的。實際上,你不再可以依賴本地調試工具,因為它們通常具有很高的特權。

文件系統內容

鏡像中應盡可能少的保留內容。如果可以將應用程序編譯為單個靜態鏈接的二進制文件,則將該二進制文件添加到暫存鏡像中將使獲得最終鏡像,該鏡像僅包含一個應用程序,無其他內容。通過減少鏡像中打包的工具數量,可以減少潛在的可在容器中執行的操作。

文件系統安全

鏡像中沒有工具是不夠的。必須防止潛在的攻擊者安裝工具。可以在此處組合使用兩種方法:

首先,避免以root用戶身份在容器內運行。該方法提供了第一層安全性,并且可以防止攻擊者使用嵌入在鏡像中的包管理器(如apt-get或apk)修改root擁有的文件。為了使用該方法,必須禁用或卸載sudo命令。

以只讀模式啟動容器,可以通過使用docker run命令中的--read-only標志或使用Kubernetes中的readOnlyRootFilesystem選項來執行此操作。可以使用PodSecurityPolicy在Kubernetes中強制執行此操作。

注意:如果應用需要將臨時數據寫入磁盤,也可以使用readOnlyRootFilesystem選項,只需為臨時文件添加emptyDir卷。Kubernetes中不支持emptyDir卷上的掛載,所以不能在啟用noexec標志的情況下掛載該卷。

最小化鏡像

生成較小的鏡像具有諸如更快的上載和下載時間等優點,這對于Kubernetes中pod的冷啟動時間尤為重要:鏡像越小,節點下載就越快。但是,構建小型鏡像很難,因為可能會在無意中給最終鏡像引入了構建依賴項或未優化的鏡像層。

使用最小的基礎鏡像

基礎鏡像是Dockerfile中FROM指令中所引用的鏡像。Dockerfile中的所有指令均基于該鏡像構建。基礎鏡像越小,生成的鏡像就越小,下載和加載就越快。例如,alpine:3.7鏡像比centos:7鏡像就小好幾十M。

我們甚至還可使用 scratch基礎鏡像,這是一個空鏡像,可以在其上構建自己的運行時環境。如果需要運行的應用程序是靜態鏈接的二進制文件,使用暫存基礎鏡像非常容易:

  1. FROM scratch  
  2. COPY mybinary /mybinary  
  3. CMD [ "/mybinary" ] 

GoogleContainerTools的Distroless項目提供了多種語言(Java,Python(3),Golang,Node.js,dotnet)的基礎鏡像。鏡像僅包含語言的運行時,剔除了Linux發行版的很多工具,例如Shell,應用包管理器等,下面項目的一個Golang的列子:

減少鏡像無效刪減

要減小鏡像的大小,需要嚴格遵守只安裝必須的應用的原則。可能有時候需要臨時安裝一些工具的軟件包,使用后在后面的步驟中再刪除。但是,這種方法也是有問題的。因為Dockerfile的每條指令都會創建一個鏡像層,創建后,再在稍后的步驟中刪除的方法,實際不能減少鏡像的大小。(數據還在,只是被隱藏在底層而已)。比如:

錯誤Dockerfile:

  1. FROM debian:9  
  2. RUN apt-get update && \  
  3. apt-get install -y \  
  4. [buildpackage]  
  5. RUN [build my app]  
  6. RUN apt-get autoremove --purge \  
  7. -y [buildpackage] && \  
  8. apt-get -y clean && \  
  9. rm -rf /var/lib/apt/lists/* 

正確Dockerfile:

  1. FROM debian:9  
  2. RUN apt-get update && \  
  3. apt-get install -y \  
  4. [buildpackage] && \  
  5. [build my app] && \  
  6. apt-get autoremove --purge \  
  7. -y [buildpackage] && \  
  8. apt-get -y clean && \  
  9. rm -rf /var/lib/apt/lists/* 

在錯誤版本Dockerfile中,[buildpackage]和/var/lib/ap /lists/*中的文件仍然存在于與第一個RUN相對應的鏡像層中。該層是鏡像的一部分,盡管里面的數據在最終鏡像中不可訪問,但也會和其他鏡像層一起上傳和下載。

在正確版本Dockerfile中,所有操作都在構建的應用程序的同一層中完成。 /var/lib/apt/lists/*中的[buildpackage]和文件在最終鏡像中不會存在,真正起到了刪除的效果。

減少鏡像無效刪除的另一種方法是使用多階段構建(Docker 17.05中引入)。多階段構建允許在第一個"構建"容器中構建應用程序,并在使用相同Dockerfile的同時在另一個容器中使用結果。

在下面的Dockerfile中,hello二進制文件內置在第一個容器中,并注入了第二個容器。因為第二個容器是從頭開始的,所以生成的鏡像僅包含hello二進制文件,而不包含構建期間所需的源文件和目標文件。但是,二進制文件是必須靜態鏈接才能正常工作。

  1. FROM golang:1.10 as builder  
  2. WORKDIR /tmp/go  
  3. COPY hello.go ./  
  4. RUN CGO_ENABLED=0 go build -a -ldflags '-s' -o hel
  5. lo  
  6. FROM scratch  
  7. CMD [ "/hello" ]  
  8. COPY --from=builder /tmp/go/hello /hello 

嘗試創建具有公共鏡像層的鏡像

如果必須下載Docker鏡像,則Docker首先檢查鏡像中是否已經包含某些層。如果你具有這些鏡像層,就不會下載。如果以前下載的其他鏡像與當前下載的鏡像具有相同的基礎鏡像,則當前鏡像的下載數據量會少很多。

在企業內部,可以為開發人員提供一組通用的標準基礎鏡像來減少必要的下載。系統只會下載每個基礎鏡像一次,初始下載后,只需要使每個鏡像中不同的鏡像層,鏡像的共同層越多,下載速度就越快。如下圖中紅色框的基礎鏡像就只需下載一次。

容器注冊表進行漏洞掃描

對服務器和虛擬機,軟件漏洞掃描是常用的一個安全手段,通過集中式軟件掃描系統,列出了每臺主機上安裝的軟件包和存在的漏洞源,并及時通知管理員修補漏洞,比如蟲蟲之前的文章中介紹過的Flan Scan系統。

由于容器原則上是不可變的,所以不建議對存在漏洞的情況下對其進行漏洞修補。最佳實踐是對其重建鏡像,打包補丁程序,然后重新部署。與服務器相比,容器的生命周期要短得多,身份標識的定義要好得多。因此,使用類似的集中檢測容器中漏洞的一種不好的方法。

為了解決這個問題,可以在托管鏡像的容器注冊表(Container Registry)中進行漏洞掃描。這樣就可以在發現容器鏡像中的漏洞。將鏡像上傳到注冊表時或漏洞庫更新時,就會進行掃描,或者啟動計劃任務定期掃描。

檢測到漏洞后,可以使用腳本來觸發自動漏洞修補過程。最好是結合版本管理(比如Gitlab)CI/CD管道來持續進行鏡像構建來進行漏洞修補。一般步驟如下:

  • 將鏡像存儲在容器注冊表中并啟用漏洞掃描。
  • 配置一個作業,該作業定期從容器注冊表中獲取新漏洞,并在需要時觸發鏡像重建。
  • 構建新鏡像后,通過持續部署系統CD來將鏡像部署到驗證環境中。
  • 手動檢查驗證是否正常。
  • 如果未發現問題,請手動推送灰度部署到生產環境。

正確標記鏡像

Docker鏡像通常由兩個部分標識:它們的名稱和標簽。例如,對于centos:8.0.1鏡像,centos是名稱,而8.0.1是標簽。如果在Docker命令中未提供最新標簽,則默認使用最新標簽。名稱和標簽對在任何給定時間都是應該唯一的。但是,可以根據需要將標簽重新分配給其他鏡像。構建鏡像時,需要正確標記,遵循統一一致標記策略。

容器鏡像是一種打包和發布軟件的方法。標記鏡像可讓用戶識別軟件的特定版本進行下載。因此,將容器鏡像上的標記系統關系到軟件的發布策略。

使用語義版本標記

發行軟件的常用方法是使用語義化版本號規范(The Semantic Versioning Specification)版本號來"標記"(如git tag命令中的)特定版本的源代碼。語義化版本號規范是為了改善各種軟件版本號格式混亂,語義不明的現狀由semver.org提出的一種處理版本號的規整方法。在該規范中軟件版本號由三部分構成:X.Y.Z,其中:

  • X是主要版本,有向下不兼容的修改或者顛覆性的更新時增加。
  • Y是次要版本,有向下兼容的修改或者添加兼容性的新功能時增加1。
  • Z是補丁程序版本,僅僅是打一些兼容性補丁,做一些兼容性修復時增加。
  • 次要版本號或補丁程序版本號中的每個增量都必須是向后兼容的更改。

如果該系統或類似系統,請按照以下策略標記鏡像:

  • 最新標簽始終指的是最新(可能穩定)的鏡像。創建新鏡像后,該標簽即被移動。
  • X.Y.Z標簽是指軟件的特定版本。請不要將其移動到其他鏡像。
  • X.Y標記是指軟件X.Y次要分支的最新修補程序版本。當發布新的補丁程序版本時,它將被移動。
  • X標記是指X主要分支的最新次要版本的最新補丁程序版本。當發布新的修補程序版本或新的次要版本時,它將移動。

使用此策略可以使用戶靈活地選擇他們要使用的軟件版本。他們可以選擇特定的X.Y.Z版本,并確保鏡像永不更改,或者可以通過選擇不太具體的標簽來自動獲取更新。

用Git提交哈希標記

如果你用持續交付系統并且經常發布軟件,則可能不能使用語義版本控制規范中描述的版本號。在這種情況下,處理版本號的常用方法是使用Git commit SHA-1哈希(或它的簡短版本)作為版本號。根據設計原理,Git的提交哈希是不可變的,并引用到軟件的特定版本。

可以將git提交哈希用作軟件的版本號,也可以用作軟件特定版本構建的Docker鏡像的標記。這樣可以使Docker鏡像具有可追溯性,在這種情況下image標記是不可變的,因此可以立即知道給定容器中正在運行哪個特定版本的軟件。在持續交付管道中,自動更新用于部署的版本號。

權衡公共鏡像的使用

Docker的一大優點是可用于各種軟件的大量公共可用鏡像。這些鏡像使你可以快速入門。但是,在為線上環境設計容器策略時,可能會遇到一些限制,使得公共提供的鏡像無法滿足要求。以下是可能導致無法使用公共鏡像的一些限制示例:

  • 精確控制鏡像內部的內容。
  • 不想依賴外部存儲庫。
  • 想嚴格控制生產環境中的漏洞。
  • 每個鏡像都需要相同的基礎操作系統。

對所有這些限制的對策都是相同的,并且但是有很高的代價,那就是必須構建自己的鏡像。對于數量有限的鏡像,可以自己構,但是當數目有增長的時。為了有機會大規模管理這樣的系統,可以考慮使用以下方法:

  • 以可靠的方式自動生成鏡像,即使對于很少生成的鏡像也是如此。
  • 解決鏡像漏洞,可以在容器注冊表中漏洞掃描。企業中不同團隊創建的鏡像執行內部標準的方法。有幾種工具可用來幫助在生成和部署的鏡像上實施策略:
  • container-diff:可以分析鏡像的內容,甚至可以比較兩個鏡像之間的鏡像。
  • container-structure-test:可以測試鏡像的內容是否符合定義一組規則。
  • Grafeas:是一種工件元數據API,可以在其中存儲有關鏡像的元數據,以便以后檢查這些鏡像是否符合你的策略。
  • Kubernetes具有準入控制器,在Kubernetes中部署工作負載之前,可以使用該準入控制器檢查許多先決條件。
  • Kubernetes還具有Pod安全策略,可用于在群集中強制使用安全選項。
  • 也能采用一種混合系統:使用諸如Debian或Alpine之類的公共鏡像作為基礎鏡像,然后基于該鏡像構建其他鏡像。或者可能想將公共鏡像用于某些非關鍵鏡像,并為其他情況構建自己的鏡像。

關于軟件可

在Docker鏡像中包含第三方庫和軟件包之前,請確保相應的許可允許這樣做。第三方許可證可能還會對重新分發施加限制,當將Docker鏡像發布到公共注冊表時,這些限制就適用。

總結

本文中介紹了容器構建過程中應該遵循的一些基本的原則,通過這些原則可以確保構建的容器安全、精煉,可收縮,可控,當然這些條款也只是建議性質的,在滿足需求的基礎上請盡量遵循。其中涉及的一些方法僅供參考,你也可以在遵守基本原則情況下使用更適合自己的解決方法。

 

責任編輯:趙寧寧 來源: 蟲蟲搜奇
相關推薦

2022-07-25 14:24:53

Docker容器安全

2020-11-23 18:39:54

容器Kubernetes架構

2022-08-01 07:27:36

JavaDocker容器

2021-06-08 10:26:10

云計算云計算產業云應用

2021-02-21 09:33:19

Docker容器安全 應用程序

2020-03-24 14:45:17

程序員技能開發者

2022-04-20 12:08:17

容器安全漏洞網絡安全

2021-05-08 16:11:08

Java開發代碼

2023-01-13 16:34:08

2020-12-16 08:23:06

DevOps容器安全容器

2019-04-26 07:56:40

容器秘密安全

2022-08-24 08:16:33

容器安全容器

2021-03-16 10:30:44

云計算云計算產業云應用

2021-02-25 09:00:00

架構開發運維

2022-05-13 14:28:03

云原生權限云原生

2025-05-20 10:03:59

數據倉庫Flink SQLPaimon

2020-07-24 10:36:17

云計算云平臺數據

2022-10-09 08:08:02

人工智能機器學習平臺

2022-05-27 05:42:34

容器云安全

2019-05-21 10:45:44

Docker架構容器
點贊
收藏

51CTO技術棧公眾號

国产精品嫩草影院一区二区| 日韩黄在线观看| 精品免费久久久久久久| 日本高清视频在线| 青青草91视频| 欧美精品xxx| 影音先锋男人在线| baoyu135国产精品免费| 在线影院国内精品| 国产在线无码精品| 欧美日韩在线中文字幕| 激情伊人五月天久久综合| 久久久久久久久久久免费| 亚洲精品国产精品国自产网站| 2020国产精品小视频| 精品成人久久av| 在线观看18视频网站| 青青草免费在线| 国产精品自拍网站| 国产精品入口免费视| 久久精品亚洲无码| 天天精品视频| 一区二区三区四区视频| 日韩精品人妻中文字幕有码 | 国内精久久久久久久久久人| 国产欧美小视频| 日韩高清在线免费观看| 日韩欧美国产一区二区在线播放 | 国产福利一区二区三区| 国产精品欧美一区二区三区奶水| 日本特黄一级片| 国产精品麻豆久久| 国产一区二区三区在线播放免费观看| 中国黄色片视频| 清纯唯美激情亚洲| 欧美日韩精品欧美日韩精品一| 青青草原av在线播放| 后进极品白嫩翘臀在线播放| 中文字幕一区免费在线观看| 午夜视频久久久| 免费看男男www网站入口在线| 成人深夜福利app| 91中文字精品一区二区| 99热这里只有精| 精品综合免费视频观看| 国产精品视频白浆免费视频| 日韩在线视频不卡| 亚洲综合电影一区二区三区| 91精品国产91久久久久久| 国产午夜久久久| 国内精品久久久久久久97牛牛 | 丁香5月婷婷久久| 欧美成人在线直播| 中文字幕亚洲日本| 涩涩屋成人免费视频软件| 日韩欧美国产系列| 国产裸体视频网站| 风间由美一区二区av101| 精品国产免费视频| 中文字幕 日本| 台湾亚洲精品一区二区tv| 精品中文视频在线| av男人的天堂av| 日韩黄色大片网站| 久久久av网站| 国产精品99re| 国产手机视频一区二区| 日本国产欧美一区二区三区| 五月天婷婷导航| 免费成人av在线播放| 国产美女直播视频一区| 精品国产九九九| 成人av在线电影| 欧美日本国产精品| youjizz在线播放| 亚洲精品你懂的| 欧美日韩中文字幕在线播放 | 国产精品久久久久久av福利| 国产在成人精品线拍偷自揄拍| 国产一区中文字幕| 国产精品一级久久久| 日本私人网站在线观看| 久久久精品欧美丰满| 一本一本a久久| 激情网站在线| 欧洲一区在线观看| 中文字幕乱码在线人视频| 麻豆精品99| 中文字幕九色91在线| 九九久久免费视频| 天堂av在线一区| 4444kk亚洲人成电影在线| 亚洲AV成人无码一二三区在线| 中文字幕第一页久久| 日韩在线视频在线| 国产精品久久久久久久久免费高清 | 国产欧美综合在线观看第十页 | 亚洲电影在线| 国产精品久久在线观看| 亚洲第一成年人网站| 国产亚洲精品福利| 国产精品久久久久9999爆乳| 91p九色成人| 精品国产sm最大网站免费看| 丁香激情五月少妇| 在线观看日韩av电影| 国产欧美一区二区三区在线| 人人妻人人澡人人爽人人欧美一区| 欧美国产精品v| 成熟丰满熟妇高潮xxxxx视频| 亚洲成人精品综合在线| 亚洲欧美日韩一区在线| 欧美精品乱码视频一二专区| 日本视频在线一区| 九色91国产| 超碰在线97国产| 91精品国产综合久久久蜜臀图片 | 最新国产の精品合集bt伙计| 国产午夜福利视频在线观看| 日韩中文字幕无砖| 日韩一区视频在线| 超碰在线免费97| av不卡一区二区三区| 91传媒免费视频| 亚洲熟女一区二区三区| 国产综合在线观看| 亚洲国产中文字幕在线视频综合| the porn av| 国产一区二区三区四区| 97在线免费观看| 亚洲国产精品视频在线| 亚洲视频在线一区| 特级丰满少妇一级| 欧美码中文字幕在线| 青青草成人在线| 天天色棕合合合合合合合| 亚洲综合色区另类av| 亚洲综合在线一区二区| 99久久激情| 成人在线激情视频| 日本精品在线| 91精品在线一区二区| 亚洲AV成人无码网站天堂久久| 日韩高清在线观看| 视频一区亚洲| 国产69精品久久| 日韩中文有码在线视频| 伊人精品在线视频| 亚洲欧洲日韩综合一区二区| 中日韩av在线播放| 一区二区三区午夜探花| 亚洲xxxxx电影| 神马午夜伦理不卡| 欧美精品一区二区三区蜜桃 | 91入口在线观看| 99热国产在线| 亚洲成人av中文字幕| 成年人午夜视频| 91丨九色丨黑人外教| 99精品视频播放| 精品国产一区二区三区久久久樱花 | 色偷偷噜噜噜亚洲男人的天堂 | 亚洲国产精品久久91精品| 国产精品成人国产乱| 99久久精品一区二区| 无码aⅴ精品一区二区三区浪潮| 九九视频精品全部免费播放| 国产精品久久久久久久久| 亚洲成人影院麻豆| 日韩精品中文字幕在线不卡尤物| 国产在线观看免费视频今夜| 99精品国产热久久91蜜凸| 欧美日韩大尺度| 99久久久久| 粉嫩精品一区二区三区在线观看 | 日韩三级电影视频| 亚洲精品99久久久久中文字幕| 欧美国产成人精品一区二区三区| 欧美国产精品一区二区三区| 国产男女无遮挡猛进猛出| 亚洲精品系列| 亚洲精品一区二区三区av| 欧美大片91| 欧美中文字幕在线| 国产在线69| 亚洲精品久久久久久久久久久久久| 探花视频在线观看| 亚洲美女视频在线观看| 美女又爽又黄视频毛茸茸| 久久成人综合网| 国产 日韩 亚洲 欧美| 国产精品亚洲人成在99www| 成人欧美在线视频| 国产精品av一区二区三区 | 久久伊人成人网| 久久久www免费人成精品| 超碰91在线播放| 久久永久免费| 韩国无码av片在线观看网站| 国产精品最新| 国产精品 日韩| 日韩电影精品| 欧美在线亚洲一区| 羞羞的网站在线观看| 一区二区在线视频播放| 天堂网在线观看视频| 91精品国产综合久久久久| 91精品国产综合久久久蜜臀九色| 一级日本不卡的影视| 亚洲精品91在线| 91亚洲男人天堂| 男人的天堂免费| 免费看精品久久片| 5月婷婷6月丁香| 黑丝一区二区三区| 精品国产无码在线| 国产乱码精品一区二区亚洲 | 婷婷久久综合九色综合伊人色| 成人性视频免费看| 久久精品这里都是精品| 无码成人精品区在线观看| 国产毛片精品视频| 欧美成人精品欧美一级乱| 一区二区三区四区五区精品视频| 欧美 国产 精品| 欧美电影三区| 亚洲精品乱码久久久久久蜜桃91| 亚洲欧洲av| 精品网站在线看| 精品成人自拍视频| 国产精品区一区| 天堂精品久久久久| 亚洲综合在线中文字幕| www.欧美| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 日韩欧美视频在线播放| 日韩精品av一区二区三区| 亚洲理论电影| 美乳视频一区二区| 五月天亚洲色图| 麻豆91av| 少妇精品久久久一区二区三区| 久久精品日产第一区二区三区乱码| 国产精品自在线拍| 国产自产精品| 亚洲自拍电影| 日韩高清在线播放| 成人三级视频| 亚洲伊人婷婷| 亚洲精品二区三区| 成人在线观看毛片| 在线成人h网| 国模吧无码一区二区三区| 模特精品在线| 91香蕉视频导航| 久久精品国产免费看久久精品| 香蕉视频999| 国产一区二区三区免费在线观看| 992tv人人草| 国产98色在线|日韩| 污污污www精品国产网站| 91老司机福利 在线| 日本爱爱爱视频| 一区在线观看免费| 免费无遮挡无码永久在线观看视频| 亚洲一级在线观看| 西西44rtwww国产精品| 日本高清成人免费播放| 在线观看视频中文字幕| 欧美一区二区视频在线观看2020 | 国语自产精品视频在线看| 色多多在线观看| 国产精品一区久久| 亚洲开心激情| 欧美日韩在线精品一区二区三区| 欧美好骚综合网| 人妻激情另类乱人伦人妻| 国产一区二区三区久久久久久久久 | 免费成人av在线| 国产成人精品一区二区在线小狼| 91在线视频18| 人人干在线观看| 亚洲va欧美va人人爽| 午夜一区二区三区四区| 日韩视频一区二区三区在线播放| 日韩欧美电影在线观看| 精品国偷自产在线视频99| 成年网站在线视频网站| 欧美韩日一区| 视频一区免费观看| 欧美久久一区| 三年中国国语在线播放免费| 国产成人精品免费| 国产三级aaa| 狠狠色狠狠色综合日日小说| 国产精品久久久午夜夜伦鲁鲁| 亚洲第一色中文字幕| 素人av在线| 欧美孕妇毛茸茸xxxx| 国产色99精品9i| 日本一区二区在线视频| 亚洲大胆视频| 天堂在线一区二区三区| 久久久综合精品| 久久久精品国产sm调教| 欧美日韩色一区| 欧美在线观看在线观看| 欧美激情亚洲视频| 最新亚洲国产| 亚洲一区在线免费| 久久久久国产精品午夜一区| 精品人妻一区二区免费| 亚洲欧洲精品天堂一级| 精品黑人一区二区三区| 亚洲国产中文字幕久久网 | 久久久久亚洲精品国产| 亚洲精品一区av| 日本一区二区三区视频免费看| 亚洲精品精选| 亚洲国产精品第一页| 亚洲情趣在线观看| 一级黄色片网站| 在线看国产精品| 免费成人直播| 九九九九精品九九九九| 精久久久久久| 欧美性猛交xx| 日韩理论片网站| 69视频免费在线观看| 亚洲精品美女视频| 美女高潮视频在线看| 国产久一道中文一区| 国产字幕视频一区二区| 中国特级黄色片| 一区二区三区在线观看欧美| 国产麻豆一精品一男同| www.久久撸.com| а天堂中文最新一区二区三区| 亚洲国产日韩综合一区| 美女视频网站黄色亚洲| 免费成人深夜蜜桃视频| 欧美精三区欧美精三区| 欧美96在线| 91超碰在线电影| 韩国一区二区三区在线观看| 美女伦理水蜜桃4| 五月婷婷综合在线| 五十路在线观看| 91成人天堂久久成人| 亚洲另类春色校园小说| 日韩中文字幕二区| 日本一区二区三级电影在线观看| 小泽玛利亚一区二区三区视频| 在线观看日韩视频| 国产成人免费av一区二区午夜| 色哺乳xxxxhd奶水米仓惠香| 成人网页在线观看| 亚洲男人的天堂在线视频| 亚洲欧美日韩一区二区三区在线| 456成人影院在线观看| 中文字幕中文字幕在线中一区高清| 国产乱一区二区| 国产精品1234区| 亚洲午夜精品久久久久久性色 | 国产亚洲精品av| 亚洲国产成人av在线| 黑人巨大精品欧美一区二区桃花岛| 日韩理论片在线观看| 久久97超碰色| 国产成人啪精品午夜在线观看| 亚洲精品视频久久| 亚洲欧洲一二区| 欧美久久在线观看| 国产亚洲一区二区三区四区| 91麻豆一区二区| 国产+人+亚洲| 色婷婷色综合| 日本wwwwwww| 色噜噜狠狠成人网p站| 麻豆传媒视频在线| 国产综合 伊人色| 久久91精品国产91久久小草| 久久黄色免费视频| 亚洲三级av在线| 亚洲精品影片| 成人性生生活性生交12| 亚洲一区在线观看免费| 黄网在线免费| 99三级在线| 日韩不卡一二三区| 久久久久亚洲AV| 亚洲新声在线观看| 国产调教精品| 91看片破解版| 欧美午夜丰满在线18影院| 18加网站在线| 色综合影院在线观看| av中文字幕不卡| 国产人妻精品一区二区三| 国产v综合ⅴ日韩v欧美大片|