k8s筆記之configmap、secret

  • 配置容器化應(yīng)用的方式:
    1.自定義命令行參數(shù)
    arg: []
    2.把配置文件直接培進(jìn)鏡像
    3.環(huán)境變量
    env
    1.cloud native 的應(yīng)用程序一般可直接通過(guò)環(huán)境變量加載配置
    2.通過(guò)entrypoint腳本來(lái)預(yù)處理變?yōu)榄h(huán)境變量配置信息
    4.存儲(chǔ)卷
    5.comfigmap、secret傳遞或者引用配置信息

一般常用的是第五種航缀,支持動(dòng)態(tài)修改配置信息和共享容器配置更加方便艰山、減少?gòu)?fù)雜的工作量

kubernetes之ConfigMap

ConfigMap用于保存配置數(shù)據(jù)的鍵值對(duì)涣仿,可以用來(lái)保存單個(gè)屬性酬姆,也可以用來(lái)保存配置文件嗜桌。ConfigMap跟secret很類似,但它可以更方便地處理不包含敏感信息的字符串辞色。

應(yīng)用實(shí)例:(可用kubectl create configmap --help 查看幫助信息)
1.命令行臨時(shí)創(chuàng)建:

[root@master-01 base]# kubectl create configmap myhost --from-file=/etc/hosts //默認(rèn)key為文件名骨宠,value為文件內(nèi)容
configmap/myhost created
[root@master-01 base]# kubectl get cm
NAME     DATA   AGE
myhost   1      4s
[root@master-01 base]# kubectl describe cm
Name:         myhost
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
hosts:
----
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.1.1.10 master-01
10.1.1.3 master-02 node-01
10.1.1.4 node-02
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.1.1.10 master-01
10.1.1.3 master-02 node-01
10.1.1.4 node-02
10.1.1.5 harbor-ali.abc.com 

Events:  <none>

2.直接定義key和值

[root@master-01 base]#   kubectl create configmap myhost --from-literal=hostfile=/etc/hosts     #自定義key值為hostfile,value為文件內(nèi)容 
configmap/myhost created
[root@master-01 base]# kubectl get cm
NAME     DATA   AGE
myhost   2      7s
[root@master-01 base]# kubectl describe cm myhost
Name:         myhost
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
hostfile:
----
/etc/hosts
key1:
----
config1
Events:  <none>

3.通過(guò)文件創(chuàng)建comfigmap
新建一個(gè)www.conf作為nginx pod的配置文件添加一下內(nèi)容

[root@master-01 configmap]# cat www.conf 
server {
    server_name myapp.abc.com
    listen 80;
        root /data/web/html;

    }

創(chuàng)建configmap

[root@master-01 configmap]# kubectl create configmap nginx-www --from-file=./www.conf       #key名稱不給默認(rèn)為文件名
configmap/nginx-www created
[root@master-01 configmap]# kubectl get cm
NAME        DATA   AGE
myhost      2      5m10s
nginx-www   1      6s
[root@master-01 configmap]# kubectl describe cm nginx-www
Name:         nginx-www
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
www.conf:
----
server {
       server_name myapp.abc.com
       listen 80;
       root /data/web/html;

  }

Events:  <none>

4.pod引用configmap(兩種方式相满,1.容器使用env引用层亿,2.通過(guò)volumes引用)

1.容器env方式引用(配置不支持動(dòng)態(tài)修改變量值)
創(chuàng)建一個(gè)configmap實(shí)例

[root@master-01 configmap]# kubectl create configmap nginx-config --from-literal=nginx_port=8080 --from-literal=server_name=www.abc.com
configmap/nginx-config created
[root@master-01 configmap]# kubectl get configmap
NAME           DATA   AGE
myhost         2      17m
nginx-config   2      8s
nginx-www      1      12m

[root@master-01 configmap]# kubectl describe cm configmap nginx-config
Name:         nginx-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
nginx_port:
----
8080
server_name:
----
www.abc.com
Events:  <none>

創(chuàng)建一個(gè)pod并引用configmap

[root@master-01 configmap]# cat myapp-cm.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-cm-test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      imagePullSecrets:
      - name: regsecret
      hostAliases:
        - ip: "10.1.1.5"
          hostnames:
          - "harbor-ali.abc.com"
      containers:
      - name: myapp
        image: "harbor-ali.abc.com/k8s_img/myapp:v1"
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 80
        env:
        - name: NGINX_SERVER_PROT
          valueFrom:
            configMapKeyRef:
              name: nginx-config  #configmap的名稱
              key: nginx_port   #configmap的key名
        - name: NGINX_SERVER_NAME
          valueFrom:
            configMapKeyRef:
              name: nginx-config  #configmap的名稱
              key: server_name   #configmap的key名



-----------------------------------------

創(chuàng)建pod

[root@master-01 configmap]# kubectl apply -f myapp-cm.yaml 
[root@master-01 configmap]# kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
myapp-cm-test-868d9f6775-g5h5w    1/1     Running   0          37s
myapp-deploy-6c94846d6f-85b45     1/1     Running   0          3h37m
myapp-deploy-6c94846d6f-v8htl     1/1     Running   0          3h37m
myapp-hostpath-596f7f779b-9ctkv   1/1     Running   0          3d8h
myapp-pv-pvc-5b7976486d-wgqvc     1/1     Running   0          3d8h
myapp-volume-749f9b4896-wrm8c     1/1     Running   0          3d8h
secret-nginx                      1/1     Running   1          3h55m

[root@master-01 configmap]# kubectl exec myapp-cm-test-868d9f6775-g5h5w -- printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=myapp-cm-test-868d9f6775-g5h5w
NGINX_SERVER_PROT=8080 #環(huán)境變量已經(jīng)傳進(jìn)來(lái)了
NGINX_SERVER_NAME=www.abc.com #環(huán)境變量已經(jīng)傳進(jìn)來(lái)了
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
MYAPP_SVC_PORT_80_TCP_PROTO=tcp
MYAPP_SVC_PORT=tcp://10.98.57.156:80
MYAPP_SVC_PORT_80_TCP_ADDR=10.98.57.156
MYAPP_SVC_SERVICE_HOST=10.98.57.156
MYAPP_SVC_SERVICE_PORT=80
MYAPP_SVC_PORT_80_TCP=tcp://10.98.57.156:80
MYAPP_SVC_PORT_80_TCP_PORT=80
NGINX_VERSION=1.12.2
HOME=/root

2.通過(guò)volumes引用(支持可動(dòng)態(tài)修改變量值)

[root@master-01 configmap]# cat myapp-cm-volume.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-cm-volume
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      imagePullSecrets:
      - name: regsecret
      hostAliases:
        - ip: "10.1.1.5"
          hostnames:
          - "harbor-ali.abc.com"
      containers:
      - name: myapp
        image: "harbor-ali.abc.com/k8s_img/myapp:v1"
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: nginxconf                       
          mountPath: /etc/nginx/config.d/       #掛載到容器的路徑
      volumes:
      - name: nginxconf                        
        configMap:                             
          name: nginx-www                        #configmap的名稱
          

創(chuàng)建pod

[root@master-01 configmap]# kubectl apply -f myapp-cm-volume.yaml 
deployment.apps/myapp-cm-volume created
[root@master-01 configmap]# kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
myapp-cm-test-868d9f6775-g5h5w     1/1     Running   0          59m
myapp-cm-volume-78b9b4fd49-9lfp5  1/1     Running   0          6s
myapp==-deploy-6c94846d6f-85b45      1/1     Running   0          4h36m
myapp-deploy-6c94846d6f-v8htl      1/1     Running   0          4h36m
myapp-hostpath-596f7f779b-9ctkv    1/1     Running   0          3d9h
myapp-pv-pvc-5b7976486d-wgqvc      1/1     Running   0          3d9h
myapp-volume-749f9b4896-wrm8c      1/1     Running   0          3d9h
secret-nginx                       1/1     Running   1          4h54m

驗(yàn)證是否在/etc/nginx/config.d/創(chuàng)建了www.conf

[root@master-01 configmap]# kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
myapp-cm-test-868d9f6775-g5h5w     1/1     Running   0          82m
myapp-cm-volume-78b9b4fd49-9lfp5   1/1     Running   0          22m
myapp-deploy-6c94846d6f-85b45      1/1     Running   0          4h59m
myapp-deploy-6c94846d6f-v8htl      1/1     Running   0          4h59m
myapp-hostpath-596f7f779b-9ctkv    1/1     Running   0          3d9h
myapp-pv-pvc-5b7976486d-wgqvc      1/1     Running   0          3d9h
myapp-volume-749f9b4896-wrm8c      1/1     Running   0          3d9h
secret-nginx                       1/1     Running   1          5h17m
[root@master-01 configmap]# kubectl exec -it myapp-cm-volume-78b9b4fd49-9lfp5 -- ls /etc/nginx/config.d/
www.conf
[root@master-01 configmap]# kubectl exec -it myapp-cm-volume-78b9b4fd49-9lfp5 -- cat /etc/nginx/config.d/www.conf
server {
    server_name myapp.abc.com
    listen 80;
        root /data/web/html;

    }

驗(yàn)證是否支持動(dòng)態(tài)修改configmap把www-nginx里面的key myapp.abc.com改為www.abc.com

[root@master-01 configmap]# kubectl edit cm nginx-www
configmap/nginx-www edited
[root@master-01 configmap]# kubectl exec -it myapp-cm-volume-78b9b4fd49-9lfp5 -- cat /etc/nginx/config.d/www.conf
server {
    server_name myapp.abc.com
    listen 80;
        root /data/web/html;

    }
[root@master-01 configmap]# kubectl exec -it myapp-cm-volume-78b9b4fd49-9lfp5 -- cat /etc/nginx/config.d/www.conf
server {
    server_name www.abc.com
    listen 80;
        root /data/web/html;

    }

可以看到等待幾秒后修改的server_name 已經(jīng)生效了

kubernetes之secret

Secret解決了密碼、token立美、密鑰等敏感數(shù)據(jù)的配置問題匿又,而不需要把這些敏感數(shù)據(jù)暴露到鏡像或者Pod Spec中,secret跟configmap類似。也是可以在pod中用env或者volumes的方式去引用只不過(guò)是secert一般存放安全性比較高的數(shù)據(jù)建蹄,如密碼碌更,密鑰等需要加密數(shù)據(jù)

  • Secret有三種類型:

1.Service Account:用來(lái)訪問Kubernetes API,由Kubernetes自動(dòng)創(chuàng)建洞慎,并且會(huì)自動(dòng)掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中痛单。

2.Opaque:base64編碼格式的Secret,用來(lái)存儲(chǔ)密碼拢蛋、密鑰等

3.kubernetes.io/dockerconfigjson:用來(lái)存儲(chǔ)私有docker registry的認(rèn)證信息桦他。

創(chuàng)建一個(gè)secret用來(lái)保存密碼相關(guān)信息(Opaque類型)


[root@master-01 configmap]# kubectl create secret generic mysql-root-password --from-literal=password=mysql123
secret/mysql-root-password created
[root@master-01 configmap]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-vwpgh   kubernetes.io/service-account-token   3      11d
mysecret              Opaque                                2      19h
mysql-root-password   Opaque                                1      7s

[root@master-01 configmap]# kubectl describe secret mysql-root-password
Name:         mysql-root-password
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  8 bytes      #不顯示內(nèi)容base64加密存放

要是想查看內(nèi)容可以用一下命令

[root@master-01 configmap]# kubectl get secret mysql-root-password -o yaml
apiVersion: v1
data:
  password: bXlzcWwxMjM=
kind: Secret
metadata:
  creationTimestamp: "2019-11-26T02:14:33Z"
  name: mysql-root-password
  namespace: default
  resourceVersion: "1624147"
  selfLink: /api/v1/namespaces/default/secrets/mysql-root-password
  uid: 01c27264-6307-4dfb-ba76-f79372fee076
type: Opaque
[root@master-01 configmap]# echo bXlzcWwxMjM= | base64 -d
mysql123

創(chuàng)建一個(gè)pod在env引用secret

[root@master-01 secret]# cat myapp-secret-env.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-secret-test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      imagePullSecrets:
      - name: regsecret
      hostAliases:
        - ip: "10.1.1.5"
          hostnames:
          - "harbor-ali.abc.com"
      containers:
      - name: myapp-secret-test
        image: "harbor-ali.abc.com/k8s_img/myapp:v1"
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 80
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-root-password  #secret的名稱
              key: password   #secret的key名
              
            

創(chuàng)建pod

[root@master-01 secret]# kubectl apply -f myapp-secret.yaml 
deployment.apps/myapp-secret-test created
[root@master-01 secret]# kubectl get pod
NAME                                 READY   STATUS    RESTARTS   AGE
myapp-cm-test-868d9f6775-g5h5w       1/1     Running   0          15h
myapp-cm-volume-78b9b4fd49-9lfp5     1/1     Running   0          14h
myapp-deploy-6c94846d6f-85b45        1/1     Running   0          19h
myapp-deploy-6c94846d6f-v8htl        1/1     Running   0          19h
myapp-hostpath-596f7f779b-9ctkv      1/1     Running   0          4d
myapp-pv-pvc-5b7976486d-wgqvc        1/1     Running   0          4d
myapp-secret-test-69cb7cff67-v9t9b   1/1     Running   0          117s
myapp-volume-749f9b4896-wrm8c        1/1     Running   0          4d
secret-nginx                         1/1     Running   1          19h

驗(yàn)證是否生效

[root@master-01 secret]# kubectl exec myapp-secret-test-69cb7cff67-v9t9b printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=myapp-secret-test-69cb7cff67-v9t9b
MYSQL_ROOT_PASSWORD=mysql123
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
MYAPP_SVC_PORT_80_TCP_PROTO=tcp
MYAPP_SVC_PORT=tcp://10.98.57.156:80
MYAPP_SVC_PORT_80_TCP_ADDR=10.98.57.156
MYAPP_SVC_SERVICE_HOST=10.98.57.156
MYAPP_SVC_SERVICE_PORT=80
MYAPP_SVC_PORT_80_TCP=tcp://10.98.57.156:80
MYAPP_SVC_PORT_80_TCP_PORT=80
NGINX_VERSION=1.12.2
HOME=/root

創(chuàng)建secret用來(lái)存儲(chǔ)私有docker registry的認(rèn)證信息 (.kubernetes.io/dockerconfigjson類型)

 [root@master-01 secret]# kubectl create secret docker-registry regsecret --docker-server=harbor-ali.abc.com --docker-username=admin --docker-password=harbor123 --docker-email=1398569257@qq.com
[root@master-01 secret]# kubectl get secrets regsecret 
NAME        TYPE                             DATA   AGE
regsecret   kubernetes.io/dockerconfigjson   1      30s

 

在pod中引用secret

[root@master-01 secret]# cat myapp-secret.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-secret
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      imagePullSecrets:
      - name: regsecret
      containers:
      - name: myapp-secret
        image: "harbor-ali.abc.com/k8s_img/myapp:v1"
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 80

創(chuàng)建pod驗(yàn)證是否成功


[root@master-01 secret]# kubectl get pod
NAME                                 READY   STATUS    RESTARTS   AGE
myapp-secret-6b44f446d-jx7xf         1/1     Running   0          56s


secret在volumes引用

[root@master-01 secret]# cat myapp-secret-volume.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-secret-volume
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      imagePullSecrets:
      - name: regsecret
      containers:
      - name: myapp-secret-volume
        image: "harbor-ali.abc.com/k8s_img/myapp:v1"
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: mysql-passwrod                       
          mountPath: /etc/secret         #掛載到容器的路徑
      volumes:
      - name: mysql-password                        
        secret:                             
          secretName: mysql-root-password                        #secret的名稱

創(chuàng)建pod并驗(yàn)證

[root@master-01 secret]# kubectl apply -f myapp-secret-volume.yaml 
deployment.apps/myapp-secret-volume created

[root@master-01 secret]# kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
myapp-secret-6b44f446d-jx7xf           1/1     Running   0          16m
myapp-secret-volume-59dd87d98b-q58wf   1/1     Running   0          11

[root@master-01 secret]# kubectl exec myapp-secret-volume-59dd87d98b-q58wf cat /etc/secret/password
mysql123

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谆棱,隨后出現(xiàn)的幾起案子快压,更是在濱河造成了極大的恐慌,老刑警劉巖垃瞧,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔫劣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡个从,警方通過(guò)查閱死者的電腦和手機(jī)脉幢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗦锐,“玉大人嫌松,你說(shuō)我怎么就攤上這事∞任郏” “怎么了萎羔?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碳默。 經(jīng)常有香客問我贾陷,道長(zhǎng)缘眶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任髓废,我火速辦了婚禮巷懈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慌洪。我一直安慰自己顶燕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布蒋譬。 她就那樣靜靜地躺著割岛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犯助。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天维咸,我揣著相機(jī)與錄音剂买,去河邊找鬼。 笑死癌蓖,一個(gè)胖子當(dāng)著我的面吹牛瞬哼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播租副,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坐慰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了用僧?” 一聲冷哼從身側(cè)響起结胀,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎责循,沒想到半個(gè)月后糟港,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡院仿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年秸抚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歹垫。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剥汤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出排惨,到底是詐尸還是另有隱情吭敢,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布若贮,位于F島的核電站省有,受9級(jí)特大地震影響痒留,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蠢沿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一伸头、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舷蟀,春花似錦恤磷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匈子,卻和暖如春河胎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虎敦。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工游岳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人其徙。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓胚迫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親唾那。 傳聞我的和親對(duì)象是個(gè)殘疾皇子访锻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355