從實際應(yīng)用場景出發(fā),應(yīng)用采用微服務(wù)開發(fā)郭计,并且通過Dockerfile構(gòu)建且部署在k8s集群上。
本文默認(rèn)有了以下的基礎(chǔ)知識:
Linux的基本操作
docker命令的操作
Dockerfile的編寫
對Nginx有一些了解
對http椒振、https有一些認(rèn)識
對devops理念有點了解
準(zhǔn)備工作:
默認(rèn)Linux系統(tǒng)昭伸,且已經(jīng)安裝了openssl
、docker
cd ~
→mkdir test
→cd test
,下文所有的操作都在test
目錄澎迎。
一庐杨、實際場景中遇到的問題
- 自簽名證書如何生成
- Nginx如何配置https
-
mixed content
問題如何解決
關(guān)于
mixed content
錯誤,是由于https應(yīng)用中存在http的請求夹供,瀏覽器報的錯誤灵份,本文用Nginx的反向代理來解決該問題,用https應(yīng)用的Nginx容器來代理需要請求的http應(yīng)用
二哮洽、本文內(nèi)容
- 自簽名證書的生成
- Nginx配置https
- Nginx配置反向代理
-
Dockerfile
編寫 - 鏡像構(gòu)建及運(yùn)行
三填渠、自簽名證書的生成
使用openssl生成證書及簽名
第一步:生成CA私鑰
$ openssl genrsa -out privatekey.pem 2048
第二步:由私鑰生產(chǎn)對應(yīng)的公鑰
$ openssl rsa -in privatekey.pem -pubout -out publickey.pem
第三步:根據(jù)私鑰生成證書簽名請求
$ openssl req -new -key privatekey.pem -out csr.pem -subj "/C=CN/ST=BJ/L=BJ/O=HD/OU=dev/CN=hello/emailAddress=test@test.com"
第四步:生成CA私鑰
$ openssl genrsa -out ca.key 2048
發(fā)送簽發(fā)請求到CA進(jìn)行簽發(fā),生成 x509證書袁铐,這里我們沒有CA服務(wù)器揭蜒,所以需要假裝生成一個CA服務(wù)器
第五步:根據(jù)CA私鑰生成CA的自簽名證書
$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CN/ST=BJ/L=BJ/O=HD/OU=dev/CN=ca/emailAddress=ca@test.com"
第六步:使用CA的私鑰和證書對用戶證書簽名
$ openssl x509 -req -days 3650 -in csr.pem -CA ca.crt -CAkey ca.key -CAcreateserial -out crt.pem
最后,得到的
crt.pem
和privatekey.pem
是我們需要的證書和私鑰剔桨,在Nginx實現(xiàn)https時需要用到屉更。在當(dāng)前目錄mkdir cert
,然后mv crt.pem ./cert/
洒缀、mv privatekey.pem ./cert/
瑰谜。
四欺冀、Nginx配置https
第一步: 在當(dāng)前目錄vim nginx-ssl.conf
第二步:寫入以下內(nèi)容:
server {
listen 443 ssl http2;
server_name _;
ssl_certificate conf.d/cert/crt.pem;
ssl_certificate_key conf.d/cert/privatekey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
client_max_body_size 20m;
location / {
root /usr/share/nginx/html;
index index.html index.htm
}
}
五、Nginx反向代理配置
把當(dāng)前應(yīng)用升級為https后萨脑,一般情況下當(dāng)前應(yīng)用需要調(diào)用其他的http的應(yīng)用隐轩,這種情況瀏覽器會出現(xiàn)
Mixed content
錯誤,想到的解決辦法有兩種:
第一種:把被調(diào)用的http應(yīng)用升級為https
第二種:采用Nginx反向代理渤早,用當(dāng)前的https的Nginx來代理被調(diào)用的http應(yīng)用
本文采用反向代理的方式职车。在配置反向代理時,采用url中前綴來匹配相關(guān)的地址鹊杖。
在vim nginx-ssl.conf
添加如下內(nèi)容:
server {
listen 443 ssl http2;
server_name _;
ssl_certificate conf.d/cert/crt.pem;
ssl_certificate_key conf.d/cert/privatekey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
client_max_body_size 20m;
location / {
root /usr/share/nginx/html;
index index.html index.htm
}
# 根據(jù)url前綴https代理http
location ^~ /test1/ {
proxy_pass http://test1.com
}
location ^~ /test2/ {
proxy_pass http://test2.com
}
}
六悴灵、Dockerfile
編寫,在test
目錄vim Dockerfile
骂蓖,添加內(nèi)容如下:
FROM nginx:latest
MAINTAINER <test@test.com>
ADD ./cert /etc/nginx/conf.d/cert/
ADD ./nginx-ssl.conf /etc/nginx/conf.d/
WORKDIR /usr/share/nginx/html/
ADD ./dist ./
EXPOSE 80
EXPOSE 443
ADD ./dist ./
這個一般情況是webpack
或者vue-cli
構(gòu)建后生成的文件积瞒,將它添加到Nginx的root目錄就可以訪問了。
七登下、鏡像構(gòu)建及運(yùn)行
第一步:鏡像構(gòu)建
docker build -t test/mynginx:v1 .
第二步:運(yùn)行容器
docker run --name mynginx-v1 -d -p 8081:80 -p 8443:443 test/mynginx:v1
最后:
可將鏡像打上標(biāo)簽茫孔、上傳到鏡像倉庫,然后在kubernetes集群中啟動等等被芳。本文為了演示每一步都是手動操作缰贝,但其實隨著云計算的發(fā)展,基礎(chǔ)設(shè)施變得越來越自動化筐钟,手動的方式無異于在科技時代還是使用遠(yuǎn)古時代的石器工具揩瞪,其效率可想而知。如果有條件的話可以借助一些devops平臺如Azure devops篓冲,如果沒條件可以自己寫shell腳本
對流程進(jìn)行編排。