主页 > 软件开发  > 

k8s---ingress对外服务(traefik)


目录

ingress的证书访问

traefik

traefik的部署方式:

deamonset

deployment

nginx-ingress与traefix-ingress相比较

nginx-ingress-controller

ui访问

deployment部署


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都会跳转到这个地址

标签:

k8s---ingress对外服务(traefik)由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“k8s---ingress对外服务(traefik)