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

使用Kubernetes的區塊鏈案例

譯文
開發 前端 區塊鏈
本文展示了如何使用Kubernetes和微服務架構來構建具有復雜功能的加密解決方案。

譯者 | 李睿

審校 | 孫淑娟

為了說明如何使用Kubernetes,建議考慮本文介紹的區塊鏈案例,并探討為加密貨幣市場開發的應用程序。這個應用程序使用的技術是實用的,也可以用于其他項目。換句話說,技術任務是一個非常通用的解決方案,主要針對Kubernetes進行了專門調整,也可以用于其他行業。

使用的技術

該項目是一個啟動項目,預算有限。而開發人員將定期為投資者提供演示,并定期展示開發新功能的進展情況。因此決定使用以下技術:

  • Node JS(NestJS 框架)
  • Postgre SQL數據庫
  • Kafka JS
  • Kubernetes(k8s)+Helm圖表
  • Flutter
  • React

開發過程

對于第一階段,開發人員的主要目的是將其應用程序拆分為微服務。在這一案例中,決定創建6個微服務。

(1)管理微服務

(2)核心微服務

(3)支付微服務

(4)郵件和通知服務

(5)Cron任務服務

(6)Webhooks微服務

值得一提的是,雖然技術堆棧是實用的,并且可以在各種情況下使用而無需更改,但上述微服務卻不是,它們是專門為這一項目中所需的功能而創建的。因此可以使用相同的技術,但必須根據需要設計新的微服務。

以下了解如何在NestJS上制作這些微服務。需要為Kafka消息代理進行配置選項。因此,為所有微服務的常用模塊和配置創建了一個共享資源文件夾。

微服務配置選項

import { ClientProviderOptions, Transport } from '@nestjs/microservices';

import CONFIG from '@application-config';

import { ConsumerGroups, ProjectMicroservices } from './microservices.enum';

const { BROKER_HOST, BROKER_PORT } = CONFIG.KAFKA;

export const PRODUCER_CONFIG = (name: ProjectMicroservices): ClientProviderOptions => ({

name,

transport: Transport.KAFKA,

options: {

client: {

brokers: [`${BROKER_HOST}:${BROKER_PORT}`],

},

}

});



export const CONSUMER_CONFIG = (groupId: ConsumerGroups) => ({

transport: Transport.KAFKA,

options: {

client: {

brokers: [`${BROKER_HOST}:${BROKER_PORT}`],

},

consumer: {

groupId

}

}

});

以消費者模式將管理面板微服務連接到Kafka。它將允許捕獲和處理來自主題的事件。

使應用程序在微服務模式下工作,以便能夠使用事件:

app.connectMicroservice(CONSUMER_CONFIG(ConsumerGroups.ADMIN)); await app.startAllMicroservices();

可以注意到消費者配置包含groupId。這是一個重要的選項,它將允許來自同一組的消費者從主題中獲取事件,并將它們分發給彼此以更快地處理它們。

例如,假設微服務接收事件的速度快于處理它們的速度。在這種情況下,可以進行自動擴展以生成額外的pod以在它們之間共享負載,并使該過程加快兩倍。

為了實現這一點,消費者應該在組中,并且在擴展之后,生成的pod也將在同一個組中。因此,他們將能夠共享加載,而不是處理來自不同Kafka分區的相同主題事件。

以下了解一個如何在NestJS中捕獲和處理Kafka事件的示例:

消費者控制器

import { Controller } from '@nestjs/common';

import { Ctx, KafkaContext, MessagePattern, EventPattern, Payload } from '@nestjs/microservices';

@Controller('consumer')

export class ConsumerController {

@MessagePattern('hero')

readMessage(@Payload() message: any, @Ctx() context: KafkaContext) {

return message;

}

@EventPattern('event-hero')

sendNotif(data) {

console.log(data);

}

}

消費者可以在兩種模式下工作。它接收事件并處理它們而不返回任何響應(EventPattern decorator),或者在處理事件后將響應返回給生產者(MessagePattern decorator)。EventPattern更好,如果可能的話應該是首選,因為它不包含任何額外的源代碼層來提供請求/響應功能。

生產者呢?

對于連接生產者,需要為負責發送事件的模塊提供生產者配置。

生產者連接

import { Module } from '@nestjs/common';

import DatabaseModule from '@shared/database/database.module';

import { ClientsModule } from '@nestjs/microservices';

import { ProducerController } from './producer.controller';

import { PRODUCER_CONFIG } from '@shared/microservices/microservices.config';

import { ProjectMicroservices } from '@shared/microservices/microservices.enum';


@Module({

imports: [

DatabaseModule,

ClientsModule.register([PRODUCER_CONFIG(ProjectMicroservices.ADMIN)]),

],

controllers: [ProducerController],

providers: [],

})

export class ProducerModule {}

基于事件的生產者

import { Controller, Get, Inject } from '@nestjs/common';

import { ClientKafka } from '@nestjs/microservices';

import { ProjectMicroservices } from '@shared/microservices/microservices.enum';


@Controller('producer')

export class ProducerController {

constructor(

@Inject(ProjectMicroservices.ADMIN)

private readonly client: ClientKafka,

) {}


@Get()

async getHello() {

this.client.emit('event-hero', { msg: 'Event Based'});

}

}

基于請求/響應的生產者

import { Controller, Get, Inject } from '@nestjs/common';

import { ClientKafka } from '@nestjs/microservices';

import { ProjectMicroservices } from '@shared/microservices/microservices.enum';



@Controller('producer')

export class ProducerController {

constructor(

@Inject(ProjectMicroservices.ADMIN)

private readonly client: ClientKafka,

) {}



async onModuleInit() {

// Need to subscribe to a topic

// to make the response receiving from Kafka microservice possible

this.client.subscribeToResponseOf('hero');

await this.client.connect();

}



@Get()

async getHello() {

const responseBased = this.client.send('hero', { msg: 'Response Based' });

return responseBased;

}

}

每個微服務可以同時在兩種模式(生產者/消費者)或兩種模式(混合)下工作。通常情況下,微服務使用混合模式來達到負載平衡的目的,為主題生成事件并均勻地使用它們,共享負載。

基于Helm圖表模板的Kubernetes配置,針對每個微服務實現。

Helm圖表描述的Admin API微服務組件及其結構

該模板由幾個配置文件組成:

  • 部署
  • hpa(水平pod自動擴展器)
  • 入口控制器
  • 服務

以下來看每個配置文件(沒有Helm模板)

Admin-API部署

apiVersion: apps/v1

kind: Deployment

metadata:

name: admin-api

spec:

replicas: 1

selector:

matchLabels:

app: admin-api

template:

metadata:

labels:

app: admin-api

spec:

containers:

- name: admin-api

image: xxx208926xxx.dkr.ecr.us-east-1.amazonaws.com/project-name/stage/admin-api

resources:

requests:

cpu: 250m

memory: 512Mi

limits:

cpu: 250m

memory: 512Mi

ports:

- containerPort: 80

env:

- name: NODE_ENV

value: production



- name: APP_PORT

           value: "80"

部署可以包含更多的精簡配置,如資源限制、健康檢查配置、更新策略等。但是提供了一個基本配置示例,可以根據任何其他項目的需要進行擴展。

Admin-API服務

--

apiVersion: v1

kind: Service

metadata:

name: admin-api

spec:

selector:

app: admin-api

ports:

- name: admin-api-port

port: 80

targetPort: 80

protocol: TCP

 type: NodePort

需要將服務暴露給外界才能使用它。通過負載均衡器公開的應用程序,并提供SSL配置以使用安全的HTTPS連接。

需要在集群上安裝一個負載均衡控制器。這是最流行的解決方案:AWS負載均衡器控制器。

然后,需要使用以下配置創建入口:

Admin-API入口控制器

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

namespace: default

name: admin-api-ingress

annotations:

alb.ingress.kubernetes.io/load-balancer-name: admin-api-alb

alb.ingress.kubernetes.io/ip-address-type: ipv4

alb.ingress.kubernetes.io/tags: Environment=production,Kind=application

alb.ingress.kubernetes.io/scheme: internet-facing

alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-2:xxxxxxxx:certificate/xxxxxxxxxx

alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'

alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS

alb.ingress.kubernetes.io/healthcheck-path: /healthcheck

alb.ingress.kubernetes.io/healthcheck-interval-seconds: '15'

alb.ingress.kubernetes.io/ssl-redirect: '443'

alb.ingress.kubernetes.io/group.name: admin-api

spec:

ingressClassName: alb

rules:

- host: example.com

http:

paths:

- path: /*

pathType: ImplementationSpecific

backend:

service:

name: admin-api

port:

                 number: 80

應用這一配置后,將創建一個新的alb負載均衡器,需要使用在“host”參數中提供的名稱創建一個域,并將流量從該主機路由到負載均衡器。

Admin-API自動擴展配置

apiVersion: autoscaling/v2beta1

kind: HorizontalPodAutoscaler

metadata:

name: admin-api-hpa

spec:

scaleTargetRef:

apiVersion: apps/v1

kind: Deployment

name: admin-api

minReplicas: 1

maxReplicas: 2

metrics:

- type: Resource

resource:

name: cpu

       targetAverageUtilization: 90

Helm呢?

當想要降低K8s基礎設施的復雜性時,Helm變得非常有用。如果沒有這個工具——需要編寫很多yml文件才能在集群上運行它。

此外,應該記住應用程序、標簽、名稱等之間的關系。但是,可以使用Helm使一切變得更簡單。它的工作方式類似于包管理器,允許創建應用程序的模板,然后使用簡單的命令準備和運行它。

使用Helm來制作模板:

Admin-API 部署(Helm圖表)

apiVersion: v1

kind: Service

metadata:

name: {{ .Values.global.appName }}

spec:

selector:

app: {{ .Values.global.appName }}

ports:

- name: {{ .Values.global.appName }}-port

port: {{ .Values.externalPort }}

targetPort: {{ .Values.internalPort }}

protocol: TCP

 type: NodePort

Admin-API 服務(Helm圖表)

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

namespace: default

name: ingress

annotations:

alb.ingress.kubernetes.io/load-balancer-name: {{ .Values.ingress.loadBalancerName }}

alb.ingress.kubernetes.io/ip-address-type: ipv4

alb.ingress.kubernetes.io/tags: {{ .Values.ingress.tags }}

alb.ingress.kubernetes.io/scheme: internet-facing

alb.ingress.kubernetes.io/certificate-arn: {{ .Values.ingress.certificateArn }}

alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'

alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS

alb.ingress.kubernetes.io/healthcheck-path: {{ .Values.ingress.healthcheckPath }}

alb.ingress.kubernetes.io/healthcheck-interval-seconds: {{ .Values.ingress.healthcheckIntervalSeconds }}

alb.ingress.kubernetes.io/ssl-redirect: '443'

alb.ingress.kubernetes.io/group.name: {{ .Values.ingress.loadBalancerGroup }}

spec:

ingressClassName: alb

rules:

- host: {{ .Values.adminApi.domain }}

http:

paths:

- path: {{ .Values.adminApi.path }}

pathType: ImplementationSpecific

backend:

service:

name: {{ .Values.adminApi.appName }}

port:

                 number: {{ .Values.adminApi.externalPort }}

Admin-API自動擴展配置(Helm圖表)

{{- if .Values.autoscaling.enabled }}

apiVersion: autoscaling/v2beta1

kind: HorizontalPodAutoscaler

metadata:

name: {{ include "ks.fullname" . }}

labels:

{{- include "ks.labels" . | nindent 4 }}

spec:

scaleTargetRef:

apiVersion: apps/v1

kind: Deployment

name: {{ include "ks.fullname" . }}

minReplicas: {{ .Values.autoscaling.minReplicas }}

maxReplicas: {{ .Values.autoscaling.maxReplicas }}

metrics:

{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}

- type: Resource

resource:

name: cpu

targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}

{{- end }}

{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}

- type: Resource

resource:

name: memory

targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}

{{- end }}

{{- end }}

模板的值位于“values.yml”、“values-dev.yml”和“values-stage.yml”文件中。使用哪一個取決于環境。檢查一下dev env的一些值的示例。

Admin-API Helm Values-Stage.yml File

env: stage

appName: admin-api

domain: admin-api.xxxx.com

path: /*

internalPort: '80'

externalPort: '80'



replicas: 1

image:

repository: xxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/admin-api

pullPolicy: Always

tag: latest



ingress:

loadBalancerName: project-microservices-alb

tags: Environment=stage,Kind=application

certificateArn: arn:aws:acm:us-east-2:xxxxxxxxx:certificate/xxxxxx

healthcheckPath: /healthcheck

healthcheckIntervalSeconds: '15'

loadBalancerGroup: project-microservices



autoscaling:

enabled: false

minReplicas: 1

maxReplicas: 100

targetCPUUtilizationPercentage: 80


env:

- name: NODE_ENV

value: stage



- name: ADMIN_PORT

   value: "80"

要在集群上應用配置,需要升級圖表并重新啟動部署。

以下檢查負責此操作的GitHub Actions步驟。

在GitHub操作中應用Helm配置

env: stage

appName: admin-api

domain: admin-api.xxxx.com

path: /*

internalPort: '80'

externalPort: '80'



replicas: 1

image:

repository: xxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/admin-api

pullPolicy: Always

tag: latest


ingress:

loadBalancerName: project-microservices-alb

tags: Environment=stage,Kind=application

certificateArn: arn:aws:acm:us-east-2:xxxxxxxxx:certificate/xxxxxx

healthcheckPath: /healthcheck

healthcheckIntervalSeconds: '15'

loadBalancerGroup: project-microservices



autoscaling:

enabled: false

minReplicas: 1

maxReplicas: 100

targetCPUUtilizationPercentage: 80


env:

- name: NODE_ENV

value: stage


- name: ADMIN_PORT

   value: "80"

結語

最終,本文研究了如何在特定案例中使用Kubernetes構建微服務。顯然跳過了其他必備步驟和組件,將代碼示例轉換為成熟的工作應用程序。但是,上述源代碼足以展示和解釋Kubernetes微服務是如何構建的。

原文標題:??Blockchain Case Using Kubernetes??,作者:Tetiana Stoyk

責任編輯:華軒 來源: 51CTO
相關推薦

2021-01-21 11:36:01

區塊鏈醫療安全

2020-07-08 15:51:25

區塊鏈數字貨幣金融

2021-07-29 16:58:22

區塊鏈比特幣數字貨幣

2018-05-15 10:26:10

區塊鏈數字貨幣比特幣

2022-01-10 10:56:37

區塊鏈技術比特幣

2021-09-23 22:40:10

區塊鏈比特幣技術

2020-05-13 09:45:08

區塊鏈公共區塊鏈私有區塊鏈

2018-04-02 16:35:57

區塊鏈數字貨幣比特幣

2019-04-03 10:50:09

Javascript區塊鏈技術

2021-04-09 20:04:34

區塊鏈Go加密

2018-03-27 09:52:30

區塊鏈數字貨幣比特幣

2022-10-26 08:42:28

2021-04-09 06:25:41

區塊鏈區塊鏈技術

2018-09-16 15:50:48

區塊鏈醫療健康數據

2018-10-10 10:42:06

2018-03-05 15:17:01

區塊鏈支付寶數字貨幣

2022-01-19 15:11:34

區塊鏈云計算安全

2017-07-19 07:27:39

區塊鏈ICO監管

2021-12-23 17:15:54

區塊鏈域名加密貨幣

2020-02-14 11:16:00

區塊鏈的醫學應用
點贊
收藏

51CTO技術棧公眾號

日韩精品1区| 欧美伦理91| 国产丶欧美丶日本不卡视频| 欧美国产精品va在线观看| 国内av免费观看| yellow在线观看网址| 久久综合九色综合97婷婷| 国产美女搞久久| 1级黄色大片儿| 欧美手机在线| 亚洲国产一区二区三区四区| 亚洲欧美另类动漫| 爱情岛亚洲播放路线| 欧美国产日韩一二三区| 国产精品 日韩| 亚洲系列第一页| 99视频精品| 欧美另类xxx| 国产7777777| 任你躁在线精品免费| 日韩色在线观看| 国产精品视频黄色| 在线天堂资源| 亚洲国产精品嫩草影院| 中文精品一区二区三区| 每日更新在线观看av| 成人小视频免费在线观看| 91精品国产综合久久香蕉最新版| 中国一级免费毛片| 国产精品扒开腿做爽爽爽软件| 正在播放亚洲1区| 国产男女猛烈无遮挡a片漫画| 亚洲精品一区二区三区中文字幕| 欧美日韩专区在线| 成年人免费在线播放| 国产无遮挡裸体视频在线观看| 一区二区三区在线看| 宅男av一区二区三区| 2017亚洲天堂1024| 国产欧美日韩综合| 日韩欧美精品一区二区| 欧美一区二区视频| 久久品道一品道久久精品| 精品国产一区二区三| 免费a级片在线观看| 国产精品99精品久久免费| 成人性生交大片免费观看嘿嘿视频| 中文字幕视频免费观看| 视频一区免费在线观看| 国产成人精品午夜| www五月天com| 日韩av电影天堂| 国产精品91久久| 进去里视频在线观看| 三级影片在线观看欧美日韩一区二区| 人九九综合九九宗合| 国产区一区二区三| 日韩中文字幕av电影| 国产福利视频一区二区| 亚洲国产无线乱码在线观看| 奇米色777欧美一区二区| 国产精品青草久久久久福利99| 免费黄色一级大片| 另类小说一区二区三区| 成人欧美一区二区三区在线湿哒哒| 国产口爆吞精一区二区| 国产精品一区二区不卡| 丁香五月网久久综合| 婷婷亚洲一区二区三区| 久久久久久久综合色一本| 日韩在线导航| 大片免费在线观看| 亚洲一区二区三区美女| 97xxxxx| 国产成人精品一区二三区在线观看 | 五月天婷婷在线播放| 91美女蜜桃在线| 天堂精品一区二区三区| 很黄的网站在线观看| 亚洲国产成人av好男人在线观看| 午夜肉伦伦影院| 99久久久国产精品免费调教网站| 欧美疯狂做受xxxx富婆| 在线观看亚洲免费视频| 日本道不卡免费一区| 欧美www在线| 六月丁香激情综合| 久久99国产精品麻豆| 国产精品免费视频一区二区| 黄色网址在线播放| 亚洲靠逼com| 欧美 日韩精品| 精品一区二区三区亚洲| 日韩高清人体午夜| 婷婷激情四射网| 在线亚洲一区| 亚洲bt欧美bt日本bt| 亚洲日本在线播放| 亚洲日本青草视频在线怡红院 | 久久精品国语| 亚洲综合在线做性| 精品亚洲综合| 亚洲午夜激情av| 97超碰人人爽| 亚洲精品动态| 欧美久久久精品| 成人黄色激情视频| 99re这里都是精品| 中国 免费 av| 国产亚洲精彩久久| 精品无人国产偷自产在线| 精品国产乱码久久久久久鸭王1| 母乳一区在线观看| 国产日产精品一区二区三区四区| 四虎久久免费| 一本大道久久a久久综合婷婷 | 亚洲一区二区色| 99国产麻豆精品| av中文字幕av| 日韩第二十一页| 亚洲女人被黑人巨大进入al| 国产在线综合网| 紧缚奴在线一区二区三区| 欧美在线视频二区| 美女搞黄视频在线观看| 日韩一区二区三区电影在线观看| 久操视频在线观看免费| 中文乱码免费一区二区三区下载| 国产精品美女在线| 男人久久精品| 色综合中文字幕| 久久久久成人精品无码中文字幕| 欧美不卡视频| 亚洲综合精品一区二区| a视频在线播放| 欧美喷潮久久久xxxxx| 亚洲精品乱码久久久久久久久久久久| 国产欧美一级| 久久资源亚洲| 亚洲永久av| 亚洲欧洲国产一区| 日韩欧美在线观看免费| 久久女同精品一区二区| 丁香啪啪综合成人亚洲| 亚洲精品播放| 国产精品吹潮在线观看| 风间由美一区| 欧美无砖砖区免费| 超薄肉色丝袜一二三| 日本中文在线一区| 亚洲欧美日韩精品在线| 亚洲欧美久久精品| 欧美床上激情在线观看| 亚洲风情第一页| 亚洲综合色网站| 人妖粗暴刺激videos呻吟| 亚洲高清成人| 九九热久久66| 婷婷激情一区| 日韩在线观看网址| 国产露脸91国语对白| 亚洲精品免费看| 国产男女无遮挡猛进猛出| 午夜精品亚洲| 久久久久久国产精品一区| 日韩电影网站| www.欧美免费| 午夜精品久久久久久久91蜜桃| 亚洲成人福利片| 中文字幕一区二区三区人妻不卡| 日韩精品乱码免费| 黄色www在线观看| 国产精品对白| 国产精品福利在线观看网址| 久cao在线| 亚洲成人激情视频| 精品久久久久久久久久久国产字幕| 国产欧美日韩亚州综合| 91亚洲一区二区| 国产欧美精品| 综合一区中文字幕| 欧美日韩大片免费观看| 国产精品久久久久久av| 四虎亚洲成人| 亚洲欧美一区二区三区情侣bbw| 伊人免费在线观看| 亚洲大尺度视频在线观看| 人妻少妇无码精品视频区| 国产一区二区三区视频在线播放| 你懂的av在线| 国产精品传媒精东影业在线| 黑人另类av| 亚洲狼人综合| 91精品国产色综合久久不卡98口| 永久免费av在线| 日韩电影在线观看中文字幕| 91好色先生tv| 色香蕉久久蜜桃| 欧美成人国产精品高潮| 国产婷婷色一区二区三区在线| 免费网站在线观看黄| 黄色日韩在线| 一区二区精品在线| 亚洲福利网站| 99视频在线播放| 欧美黄页免费| 欧美一区二区三区……| 性爱视频在线播放| 日韩亚洲欧美中文在线| 麻豆app在线观看| 亚洲精品白浆高清久久久久久| 国产一区二区三区中文字幕| 色婷婷精品大视频在线蜜桃视频 | 欧美视频在线观看| 亚洲视频在线二区| 九一成人免费视频| 国产精品久久亚洲| 日韩三级不卡| 国产精品久久国产精品99gif| 国产伦理精品| 久久久久久久香蕉网| av毛片在线免费| 神马国产精品影院av| 国产高清自拍视频在线观看| 日韩av一区在线观看| 丰满人妻一区二区三区免费视频 | 欧美日韩国产中字| 久久综合综合久久| 一区二区三区日韩精品视频| 国产jizz18女人高潮| 国产日产欧产精品推荐色| 国产偷人妻精品一区| k8久久久一区二区三区 | 精品网站aaa| 成人av影视在线| 国产欧美88| 国产精品自拍视频| 成人亚洲综合| 国产精品男人的天堂| 免费高清视频在线一区| 日av在线播放中文不卡| 在线观看v片| 日本久久精品视频| 日韩在线影院| 国产精品video| 蜜桃视频成人m3u8| 国产精品久久视频| 四虎地址8848精品| 成人精品在线视频| 日本精品在线观看| 国产高清一区二区三区| 9l亚洲国产成人精品一区二三| 国产精品xxxx| 久久电影在线| 欧美三日本三级少妇三99| 蜜桃国内精品久久久久软件9| 欧美不卡福利| 日韩一区三区| 青青草原网站在线观看| 欧美日韩国产亚洲一区| 欧洲精品一区二区三区久久| 99视频精品免费观看| 成熟老妇女视频| 免费欧美在线视频| 亚洲综合123| 岛国精品一区二区| 国产精品毛片一区二区| 中文字幕av资源一区| 二区三区四区视频| 亚洲观看高清完整版在线观看| 五月婷婷亚洲综合| 在线免费观看视频一区| 国产一区二区网站| 亚洲国产毛片完整版| 嫩草在线播放| 免费不卡欧美自拍视频| 98色花堂精品视频在线观看| 国产精品444| 91蝌蚪精品视频| 国产精品免费一区二区三区四区 | 国产极品国产极品| 专区另类欧美日韩| 国产在线成人精品午夜| 色拍拍在线精品视频8848| 日本欧美www| 日韩免费视频一区二区| 青青草娱乐在线| 日韩中文av在线| 激情国产在线| 奇米影视亚洲狠狠色| 亚洲电影二区| 玛丽玛丽电影原版免费观看1977| 视频一区欧美| wwwjizzjizzcom| 视频一区二区三区中文字幕| www.偷拍.com| 欧美激情一区二区| 欧美成人精品欧美一| 色激情天天射综合网| 亚洲精品一区二区三区不卡| 亚洲免费高清视频| 日本一本在线免费福利| 国产精品夜色7777狼人| 天堂网av成人| 日韩专区第三页| 蜜桃视频在线一区| 久久午夜夜伦鲁鲁片| 中文字幕二三区不卡| 日本韩国欧美中文字幕| 日韩一区二区三区精品视频| 天堂中文8资源在线8| 欧美一区二区.| 麻豆成人入口| 在线无限看免费粉色视频| 日韩福利视频导航| 国产制服丝袜在线| 亚洲女女做受ⅹxx高潮| 中文字幕日产av| 亚洲图片制服诱惑| 日韩精品极品| 久99久视频| 天天影视欧美综合在线观看| 久久久久久久激情| 成+人+亚洲+综合天堂| 久久黄色免费视频| 欧美高清性hdvideosex| 在线播放麻豆| 国产精品第8页| 国产剧情一区| 成年人在线看片| 久久夜色精品一区| 欧美一区二区三区网站| 精品一区二区亚洲| 99在线视频影院| 国产精品制服诱惑| 亚洲激情女人| 欧美深性狂猛ⅹxxx深喉| 婷婷激情综合网| 污视频软件在线观看| 91精品国产免费久久久久久 | 色综合影院在线| 欧美日韩在线精品一区二区三区激情综合 | 91亚洲精选| 国产啪精品视频| 久久久久久久久国产一区| 天天综合天天添夜夜添狠狠添| 欧美激情在线观看视频免费| 夜夜躁狠狠躁日日躁av| 色悠悠国产精品| www.久久久.com| 国产 国语对白 露脸| 大陆成人av片| 天天操夜夜操视频| 亚洲天堂免费在线| 国产一区二区色噜噜| 致1999电视剧免费观看策驰影院| 韩国精品在线观看| 国产亚洲小视频| 日韩成人xxxx| 视频精品导航| 中文字幕剧情在线观看一区| 国产精品1024| 久久久国产精品成人免费| 亚洲午夜精品久久久久久久久久久久 | 亚欧精品在线视频| 亚洲福利国产精品| 欧美女同网站| 成人h视频在线观看播放| 亚洲五月婷婷| 亚洲天堂视频一区| 亚洲一区二区中文在线| 男同在线观看| 亚洲伊人一本大道中文字幕| 国产精品www994| 99久久精品免费视频| 欧美一区二区视频在线观看2022| 大香伊人久久| 色播五月综合| 粉嫩在线一区二区三区视频| www毛片com| 久久中文久久字幕| 欧美午夜寂寞| 国产aⅴ爽av久久久久| 亚洲v日本v欧美v久久精品| 成人在线高清视频| 成人午夜电影免费在线观看| 久久国产88| 2018天天弄| 亚洲欧美日韩成人| 天堂精品久久久久| 日本成人黄色网| 一区二区三区.www| 成人在线免费电影| 国产一区二区三区四区hd | 色哟哟无码精品一区二区三区| 91精品福利视频| 久草免费在线色站| 日韩精品成人一区二区在线观看| 国产精品亚洲一区二区三区在线| 人人草在线观看|