預知
ingress實現(xiàn)https代理
創(chuàng)建證書 密鑰
secrets保存密鑰信息,部署pod時把secrets掛載到pod
[root@master01 ~]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out.crt -subj "/CN=nginxzzr/O=nginxzzr"
req:生成證書文件的請求
x509:生成x.509自簽名的證書
-sha256:表示生成的密鑰不加密
-day 365:證書有效期365天
-newkey rsa:2048 :RSA密鑰對,長度2048位。
-keyout tls.key -out.crt:密鑰文件key 證書文件:crt
-subj "/CN=nginxzzr/O=nginxzzr":主題 , CN common name O;organization
kubectl create secret tls tls-secret --key=tls.key --cert=tls.crt
創(chuàng)建secret
創(chuàng)建deployment,service,ingress的yaml資源
apiVersion: apps/v1
kind: metadata
metadata:
name: nginx-https
labels:
app: https
spec:
replicas: 3
selector:
matchLabels:
app: https
template:
metadata:
labels:
app: https
spec:
containers:
- name: nginx
image: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: https
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress-https
spec:
tls:
- hosts:
- www.123zzr.com
secretName: tls-secret
#加密的配置保存在ingress當中(請求---ingress-controller---ingress----service)。所以在ingress模塊將加密文件導入
#在代理進行時,就要先驗證密鑰對,然后再把請求轉(zhuǎn)發(fā)到service對應的pod
rules:
- host: www.123zzr.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
wq
kubectl apply -f ingress-https.yaml
kubectl get pod
kubectl get svc -n ingress-nginx
vim /etc/hosts
也可以實現(xiàn)負載均衡。
nginx的登錄賬號認證
cd /opt
cd https
mkdir basic-auth
cd basic-auth
yum -y install httpd
htpasswd -c auth zzr
123456
123456
//認證的文件名只能叫auth
ls
認證文件已經(jīng)生成
kubectl create secret generic basic-auth --from-file=auth
kubectl describle secrets basic-auth
vim ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-auth
annotations:
#開啟認證模塊
nginx.ingress.kubernets.io/auth-type: basic
#設置認證類型位basic,這是k8s自帶的認證加密模塊
nginx.ingress.kubernets.io/auth-secret: basic-auth
#把認證的加密模塊導入ingress當中
nginx.ingress.kubernets.io/auth-realm: 'Authentication Required -zzr'
spec:
rules:
- hosts: www.zzr.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
nginx重寫
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-rewrite
annotations:
nginx.ingress.kubernetes.io/rewrite-target: https://www.123zzr.com:32396
spec:
rules:
- host: www.zzr.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
vim /etc/hosts
nginx-ingress-controller
traefik ingress controller
traefik 是一個為了讓部署微服務更加快捷而誕生的一個http反向代理,負載均衡。
traefik設計時就能夠?qū)崟r的和k8s API交互,可以感知后端service和pod的變化,還可以自動更新配置和重載。
pod內(nèi) nginx 80 8081
traefik的部署方式:
daemonset
特點:優(yōu)點,每個節(jié)點都會部署一個traefik,節(jié)點感知,可以自動發(fā)現(xiàn),更新容器的配置。不需要手動重載。
缺點:資源占用,大型集群中,daemonset可能會運行多個traefik的實力,尤其是節(jié)點上不需要大量容器的情況下。沒有辦法擴縮容。
部署對外集群:對外的業(yè)務會經(jīng)常變更,daemonset可以更好的,自動的發(fā)現(xiàn)服務配置變更
deployment:
優(yōu)點:集中辦公控制,可以使用少量的實例來運行處理整個集群的流量。更容易升級和維護。
缺點:deployment的負載均衡不會均分到每個節(jié)點。
無法感知容器內(nèi)部配置的變化,所以得手動更新。
部署對內(nèi)集群:對內(nèi)的相對穩(wěn)定,更新和變化也比較少,適合deployment
tarffic-type:internal 對內(nèi)服務
traffic-type:external 對外服務
nignx-ingress和traefik-ingress區(qū)別
nginx-ingress 相對較慢
工作原理都一樣,都是7層代理,都可以動態(tài)的更新配置,都可以自動發(fā)現(xiàn)服務。
traefik-ingress自動更新的重載更快,更方便
traefik的并發(fā)能力只有nginx-ingress的60%
演示deployment
cd /opt
mkdir traefik
cd traefik
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
//daemonset
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml
kubectl apply -f traefik-rbac.yaml
kubectl apply -f traefik-ds.yaml
kubectl apply -f ui.yaml
vim traefik-
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-traefik
labels:
nginx: traefik
spec:
replicas: 3
selector:
matchLabels:
nginx: traefik
template:
metadata:
labels:
nginx: traefik
spec:
containers:
- name: nginx
image: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:
name: nginx-traefik-svc1
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
nginx: traefik
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-traefik-test1
spec:
rules:
- host: www.zzrhj.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-traefik-svc1
port:
number: 80
wq
kubectl apply -f traefik
daemonset演示
cd /opt
mkdir traefik
cd traefik
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
//daemonset
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml
kubectl apply -f traefik-rbac.yaml
kubectl apply -f traefik-ds.yaml
kubectl apply -f ui.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-traefik
labels:
nginx: traefik
spec:
replicas: 3
selector:
matchLabels:
nginx: traefik
template:
metadata:
labels:
nginx: traefik
spec:
containers:
- name: nginx
image: nginx:1.22
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx
volumes:
- name: nginx-conf
configMap:
name: nginx-conf
---
apiVersion: v1
kind: Service
metadata:
name: nginx-traefik-svc1
spec:
ports:
- port: 81
targetPort: 81
protocol: TCP
selector:
nginx: traefik
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-traefik-test1
spec:
rules:
- host: www.abcabc.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-traefik-svc1
port:
number: 81
ingress總結(jié)
ingress的類型:
nginx-ingress-controller
traefik-ingress-controller
這兩個都是開源的控制器
nginx-ingress-controller控制器三種模式:
deployment+loadbalancer:公有云提供負載均衡的公網(wǎng)地址
daemonset+hostnetwork+nodeselector:和節(jié)點服務共享網(wǎng)絡,一個節(jié)點一個controller pod。使用宿主機的端口性能最好,適合大并發(fā)
deployment+nodeport:最常見也是最常用,也是最簡單的方法。但是性能不太好,多了一層nat地址轉(zhuǎn)發(fā)。
適用于高并發(fā)、大集群使用
traefik-ingress-controller控制器模式:
daemonset:對外,開源自動更新容器配置。使用hostnetwork模式 使用節(jié)點網(wǎng)絡
deployment:對內(nèi) 無法自動更新配置。使用nodeport模式。
適用于小集群
?
https:
1.生成證書,密鑰
2.創(chuàng)建secret,保存證書和密鑰
3.創(chuàng)建ingress把secret導入。
加密認證:
-
htpasswd -c auth:認證文件只能是auth
-
創(chuàng)建ingress時指定認證的類型、導入密鑰文件、最后加上密鑰信息
-
定義ingress的規(guī)則
-
annotations: #開啟認證模塊的配置 nginx.ingress.kubernetes.io/auth-type: basic #設置認證類型為basic。是k8s自帶的認證加密模塊 nginx.ingress.kubernetes.io/auth-secret: basic-auth #把認證的加密模塊導入到ingress當中 nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required-zyg' #設置認證窗口的提示信息。
nginx重定向文章來源:http://www.zghlxwxcb.cn/news/detail-804059.html
在指定的ingres文件當中聲明的url都會跳轉(zhuǎn)到這個地址文章來源地址http://www.zghlxwxcb.cn/news/detail-804059.html
nginx.ingress.kubernetes.io/rewrite-target: https://www.123ccc.com:30416
#在指定的ingres文件當中聲明的url都會跳轉(zhuǎn)到這個地址
到了這里,關(guān)于k8s---ingress實現(xiàn)https代理訪問的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!