k8s---ingress对外服务(traefik)
ingress实现https代理访问:需要证书和密钥创建证书 密钥secrets 保存密钥信息,部署pod时把secrets挂载到pod。
目录
nginx-ingress与traefix-ingress相比较
ingress的证书访问
ingress实现https代理访问:
需要证书和密钥
创建证书 密钥
secrets 保存密钥信息,部署pod时把secrets挂载到pod
创建密钥和证书
#创建密钥和证书
openssl req -x509 -sha256 -nodes -days 356 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
req: 生成证书文件的
x509: 生成x.509自签名的证书
-sha256:表示使用sha-256的散列算法
-nodes:表示生成的密钥不加密
-days 365: 证书有效期是365天
-newkey rsa:2048: RSA的密钥对,长度2048位
-keyout tls.key -out tls.crt: 密钥文件 key 证书文件 crt
-subj"/CN=nginxsvc/O=nginxsvc”: 主题,CN common name O : organization
#用secret保存密钥和证书
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
apiVersion: apps/v1
kind: Deployment
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.123ccc.com
secretName: tls-secret
#加密的配置保存在ingress,请求---ingress-controller--ingress---转发到service
#在代理进行时,就要先验证密钥对,然后再把请求转发service到相应的pod
rules:
- host: www.123ccc.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
访问
https://www.123ccc.com:31505/
或
curl -k https://www.123ccc.com:31505
nginx的登录账户认证
yum -y install httpd
#借用httpd的htpasswd
htpasswd -c auth zyg
New password: 123456
Re-type new password: 123456
#生成加密
kubectl create secret generic basic-auth --from-file=auth
basic-auth.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-auth
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 -lyw'
#设置认证窗口的提示信息。
spec:
rules:
- host: www.zyg1.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
访问
https://www.zyg1.com:31505
重定向
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-rewrite
annotations:
nginx.ingress.kubernetes.io/rewrite-target: https://www.zyg1.com:31505
#访问页面会跳转到指定的页面。
spec:
rules:
- host: www.liukgc.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
kubectl apply -f ingress-rewirte.yaml
访问
https://www.liukgc.com:31505
traefik
traefik ingress-controller--deployment
traefik是一个为了让部署微服务更加快捷而诞生的一个http方向代理,负载均衡,
traefix设计时就能够实时的和k8s api交互,感知后端口service以及pod的变化,可以自动更新配置和重载。
可以自带感知后端变化
traefik的部署方式:
deamonset
优点-特点:每个节点都会部署一个traefik,节点感知可以自动发现,更新容器的配置。不需要手动重载
缺点:占用资源大,大型集群中,deamonset可能会运行多个traefik实例,尤其是节点上不需要大量容器运行的情况下,无法扩缩容
部署对外集群,对外的业务会经常变更,deamonset可以更好的发现服务配置变更
deployment
优点:集中办公控制,可以使用少量的实例来运行处理整个集群的流量。更容易升级和维护。
缺点:deployment的负载均衡不会均分到每个节点。需要手动更新。他无法感知容器内部配置的变化。
部署对内集群:对内的相对稳定,更新和变化也比较少,适合deployment.
traffic-type:internal 对内服务
traffic-type:external 对外服务
nginx-ingress与traefix-ingress相比较
nginx-ingress 相对较慢
traefix-ingress 自带更新的的重载快,更方便
工作原理都一样,都是7层代理,都可以动态的更新配置,都可以自动发现服务
traefik的并发能力只有nginx-ingress的6成 60%
nginx-ingress-controller
ui访问
#权限
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
#deamonset的
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
#deployment的
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml
#ui的
wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml
kubectl apply -f traefik-rbac.yaml
kubectl apply -f traefik-deployment.yaml
kubectl apply -f ui.yaml
访问ui
http://192.168.10.10:30488/dashboard/
deployment部署
123.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-traefix
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-traefix-svc1
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
nginx: traefik
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-traefix-test1
spec:
rules:
- host: www.yyw.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-traefix-svc1
port:
number: 80
做映射
访问
http://www.yyw.com:30227/
总结
nginx-ingress-controller
deployment+loadbalancer:要公有云提供的负载均衡的公网地址
daemonset+hostbnetwork+nodeselector: 和节点服务共享网络,一个节点只能部署一个controller pod,使用宿主机的端口性能最好,适合大并发
deployment+NodePort:最常见、最常用,最简单的方法。但行呢个不太好,多了一层nat地址转发
适用于大并发
traefik-ingress-controller:
daemonset 对外 可以自动更新容器的配置 host节点网络 deployment 对内 无法自动自动更新配置 Nodeport
适用于小的集群,并发是ingress的
https: 1.生成证书密钥 2.创建secret,保存证书和密钥
3.创建ingress把secret导入
加密认证: 1、htpasswd -c auth 认证文件只能是auth 2、 创建ingress:
nginx.ingress.kubernets.io/auth-type: basic
#声明认证类型
nginx.ingress.kubernets.io/auth-secret: basic-auth
#导入认证的密钥文件,sercet的方式存储集群当中
重定向:
nginx.ingress.kubernetes.io/rewrite-target: https://123ccc.com:31505
在ingress文件当中声明的URI都会跳转到这个地址
更多推荐
所有评论(0)