基本说明
创建一个名为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: 4
template:
metadata:
labels:
app: nginx-ssl
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 443
volumeMounts:
- name: conf
mountPath: /etc/nginx
- name: certs
mountPath: /etc/certs
volumes:
- name: conf
configMap:
name: nginx-conf
- name: certs
secret:
secretName: ssl
创建一个名为nginx-service的Service对象,指定标签选择器为app=nginx-ssl,类型为LoadBalancer,监听443端口。
kind: Service
apiVersion: v1
metadata:
name: nginx-service
spec:
selector:
app: nginx-ssl
type: LoadBalancer
ports:
- protocol: TCP
port: 443
targetPort: 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