在K8s上处理nginx

  • Post author:
  • Post category:其他




基本说明

创建一个名为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



版权声明:本文为weixin_38233104原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。