k8s---ingress实现https代理访问

这篇具有很好参考价值的文章主要介绍了k8s---ingress实现https代理访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

预知

ingress实现https代理

创建证书 密钥

secrets保存密钥信息,部署pod时把secrets挂载到pod

k8s---ingress实现https代理访问,kubernetes,容器,云原生

[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
创建secret

创建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模块将加密文件导入
#在代理进行时,就要先验证密钥对,然后再把请求转发到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

k8s---ingress实现https代理访问,kubernetes,容器,云原生

k8s---ingress实现https代理访问,kubernetes,容器,云原生

也可以实现负载均衡。

nginx的登录账号认证

cd /opt
cd https
mkdir basic-auth
cd basic-auth
yum -y install httpd
htpasswd -c auth zzr 
123456
123456
//认证的文件名只能叫auth

ls
认证文件已经生成

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

k8s---ingress实现https代理访问,kubernetes,容器,云原生

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

k8s---ingress实现https代理访问,kubernetes,容器,云原生

k8s---ingress实现https代理访问,kubernetes,容器,云原生

k8s---ingress实现https代理访问,kubernetes,容器,云原生

nginx-ingress-controller

traefik ingress controller

traefik 是一个为了让部署微服务更加快捷而诞生的一个http反向代理,负载均衡。

traefik设计时就能够实时的和k8s API交互,可以感知后端service和pod的变化,还可以自动更新配置和重载。

pod内 nginx 80 8081

traefik的部署方式:

daemonset

特点:优点,每个节点都会部署一个traefik,节点感知,可以自动发现,更新容器的配置。不需要手动重载。

缺点:资源占用,大型集群中,daemonset可能会运行多个traefik的实力,尤其是节点上不需要大量容器的情况下。没有办法扩缩容。

部署对外集群:对外的业务会经常变更,daemonset可以更好的,自动的发现服务配置变更

deployment:

优点:集中办公控制,可以使用少量的实例来运行处理整个集群的流量。更容易升级和维护。

缺点:deployment的负载均衡不会均分到每个节点。

无法感知容器内部配置的变化,所以得手动更新。

部署对内集群:对内的相对稳定,更新和变化也比较少,适合deployment

tarffic-type:internal 对内服务

traffic-type:external 对外服务

nignx-ingress和traefik-ingress区别

nginx-ingress 相对较慢

工作原理都一样,都是7层代理,都可以动态的更新配置,都可以自动发现服务。

traefik-ingress自动更新的重载更快,更方便

traefik的并发能力只有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

k8s---ingress实现https代理访问,kubernetes,容器,云原生

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

k8s---ingress实现https代理访问,kubernetes,容器,云原生

k8s---ingress实现https代理访问,kubernetes,容器,云原生

k8s---ingress实现https代理访问,kubernetes,容器,云原生

ingress总结

ingress的类型:

nginx-ingress-controller

traefik-ingress-controller

这两个都是开源的控制器

nginx-ingress-controller控制器三种模式:

deployment+loadbalancer:公有云提供负载均衡的公网地址

daemonset+hostnetwork+nodeselector:和节点服务共享网络,一个节点一个controller pod。使用宿主机的端口性能最好,适合大并发

deployment+nodeport:最常见也是最常用,也是最简单的方法。但是性能不太好,多了一层nat地址转发。

适用于高并发、大集群使用

traefik-ingress-controller控制器模式:

daemonset:对外,开源自动更新容器配置。使用hostnetwork模式 使用节点网络

deployment:对内 无法自动更新配置。使用nodeport模式。

适用于小集群
 

https:

1.生成证书,密钥

2.创建secret,保存证书和密钥

3.创建ingress把secret导入。

加密认证:

  1. htpasswd -c auth:认证文件只能是auth

  2. 创建ingress时指定认证的类型、导入密钥文件、最后加上密钥信息

  3. 定义ingress的规则

  4.   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重定向

在指定的ingres文件当中声明的url都会跳转到这个地址文章来源地址https://www.toymoban.com/news/detail-804059.html

    nginx.ingress.kubernetes.io/rewrite-target: https://www.123ccc.com:30416
#在指定的ingres文件当中声明的url都会跳转到这个地址

到了这里,关于k8s---ingress实现https代理访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s中部署nginx-ingress实现外部访问k8s集群内部服务

    k8s通过nginx-ingress实现集群外网访问功能 1.1 ingress 工作原理 step1:ingress contronler通过与k8s的api进行交互,动态的去感知k8s集群中ingress服务规则的变化,然后读取它,并按照定义的ingress规则,转发到k8s集群中对应的service。 step2:而这个ingress规则写明了哪个域名对应k8s集群中的

    2024年02月07日
    浏览(38)
  • K8s进阶之网络:pod内不同容器、同节点不同pod通信、CNI插件、不同节点pod通信、Flannel容器网络、Serivce连接外部网络、服务发现、Nginx反向代理与域名、Ingress代理

    Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的 所有容器都共享相同的网络命名空间和IP地址——PodIP ,所以在同一个Pod内的容器间通信可以 通过localhost直接通信 。 k8s创建Pod时永远都是首先

    2024年02月05日
    浏览(53)
  • K8s(Kubernetes)学习(六)——Ingress

    什么是 Ingress Ingress 和 Service 区别 Ingress 控制器 Traefik 使用 Ingress Route的定义 1 简介 https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/ Ingress 是一种 Kubernetes 资源类型,它允许在 Kubernetes 集群中暴露 HTTP 和 HTTPS 服务 。通过 Ingress,您可以将流量路由到不同的服务和端点,而

    2024年02月07日
    浏览(41)
  • 云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行

    Kubernetes是一个开源的, 用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署,规划,更新,维护的一种机制 。其核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,管理员可

    2024年02月08日
    浏览(82)
  • Kubernetes(k8s)使用ingress发布服务

    目录 一.系统环境 二.前言 三.Kubernetes ingress简介 四.Ingress vs NodePort vs LoadBalancer 五.安装部署Nginx Ingress Controller控制器 六.使用Ingress来发布Kubernetes服务 6.1 创建3个pod 6.2 配置ingress规则发布服务 七.总结 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本 Nginx Ingress C

    2024年02月08日
    浏览(51)
  • Kubernetes技术--k8s核心技术 ingress

    1.引入        我们之前在部署应用(如nginx)的时候,如果你需要外部进行访问,使用的是service中的nodePort方式进行对外的暴露。然后外部就可以使用ip + 端口号来进行访问部署应用。         其实这一种方式是存在着较为明显的缺陷,每一个端口你只能够使用一次,一个端口

    2024年02月10日
    浏览(38)
  • 【kubernetes系列】k8s ingress配置websocket支持

    背景:公司的后端同事在代码调试过程中需要上传一个文件,调用的websocket接口 浏览器上传文件一直卡主,通过浏览器调试模式发现无法正常获取websocket的连接 websocket的接口访问可以通过wscat命令(需单独安装)测试。 浏览器访问报错如下: WebSocket connection to ‘ws://*******

    2024年02月06日
    浏览(50)
  • Kubernetes(k8s)当中安装并使用ingress暴露应用

    当我们使用不同类型的服务来暴露应用的时候会遇到一下问题: LoadBalancer :当我们在使用LoadBalancer类型的Service暴露服务的时候,一般都需要占用一个公网或者是内网IP地址。使用ingress我们就可以通过一个IP地址暴露多个服务。Ingress会根据客户端输入的不同的域名来确定我们

    2024年02月11日
    浏览(42)
  • 【一起来学kubernetes】7、k8s中的ingress详解

    Ingress 是Kubernetes集群中的一种资源类型,用于实现用域名的方式访问Kubernetes内部应用。它为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机。在生产环境中常用的Ingress有 Treafik 、 Nginx 、 HAProxy 、 Istio 等。基本概念是在Kubernetes v 1.1版中添

    2024年02月05日
    浏览(44)
  • K8s的ingress-nginx配置https

    在另一台机器上配置hosts解析www.yaoyao.com,然后访问 curl --cacert tls.crt https://www.yaoyao.com:10443 这里的10443端口是ingress-nginx-controller服务暴露的nodeport端口

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包