基本說明
創建一個名為ssl的TLS類型的Secret對象,用于存儲證書和密鑰信息。
kubectl create secret tls ssl --cert=server.crt --key=server.key
配置Nginx的events塊,設置worker連接數為1024。
events {worker_connections 1024;
}
配置Nginx的http塊,指定監聽443端口,并啟用SSL。根據請求的域名,進行反向代理到varnish-service。
http {server {listen 443 ssl;server_name my-domain.com www.my-domain.com;ssl on;ssl_certificate /etc/certs/tls.crt;ssl_certificate_key /etc/certs/tls.key;location / {proxy_pass http://varnish-service:80;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;}}
}
創建一個名為nginx-conf的ConfigMap對象,從nginx.conf文件中讀取配置。
kubectl create configmap nginx-conf --from-file=nginx.conf
創建一個名為nginx-ssl的Deployment對象,指定副本數為4,使用nginx鏡像,并掛載conf和certs兩個卷。conf卷通過之前創建的nginx-conf ConfigMap對象來進行配置,certs卷通過之前創建的ssl Secret對象來提供證書和密鑰。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: nginx-ssl
spec:replicas: 4template:metadata:labels:app: nginx-sslspec:containers:- name: nginximage: nginxports:- containerPort: 443volumeMounts:- name: confmountPath: /etc/nginx- name: certsmountPath: /etc/certsvolumes:- name: confconfigMap:name: nginx-conf- name: certssecret:secretName: ssl
創建一個名為nginx-service的Service對象,指定標簽選擇器為app=nginx-ssl,類型為LoadBalancer,監聽443端口。
kind: Service
apiVersion: v1
metadata:name: nginx-service
spec:selector:app: nginx-ssltype: LoadBalancerports:- protocol: TCPport: 443targetPort: 443
使用nginx-deploy.yaml文件創建Deployment對象。
kubectl create -f nginx-deploy.yaml
使用nginx-service.yaml文件創建Service對象。
kubectl create -f nginx-service.yaml
列出當前所有的Service對象。
kubectl get services
以上操作的目的是創建一個使用Nginx鏡像的Deployment對象,通過LoadBalancer類型的Service對象將外部請求的443端口轉發到Nginx容器的443端口。證書和密鑰存儲在名為ssl的Secret對象中,Nginx配置文件存儲在名為nginx-conf的ConfigMap對象中。
參考
Designing_Distributed_Systems.pdf