【云原生】Ingress控制器超级详解

news2024/9/19 9:54:55

Ingress资源对象

文章目录

  • Ingress资源对象
    • 一、Ingress
      • 1.1、Ingress是什么?
      • 1.2、Ingress术语
      • 1.3、Ingress类型
    • 二、Ingress详细
      • 2.1、部署Nginx-Ingress控制器
      • 2.2、最小Ingress资源
      • 2.3、Ingress规则
    • 三、一个域名多个访问路径多SVC
    • 四、多域名Ingress
    • 五、转发到默认Service
    • 六、TLS证书加密
      • 6.1、创建Openssl生成证书
      • 6.2、base64加密证书数据
      • 6.3、创建Secret存储
      • 6.4、配置Ingress资源

一、Ingress

  • Ingress是对集群中服务的外部访问进行管理的API对象,典型的访问呢方式是HTTP,Ingress可以提供负载均衡、SSL和基于名称的虚拟托管。

1.1、Ingress是什么?

  • Ingress提供从集群外部到集群内部服务的HTTP和HTTPS路由。流量路由,由Ingress资源所定义的规则来控制。

  • 下面是Ingress的一个简单的示例,可将所有流量都发送到同一Service:
    在这里插入图片描述

图.ingress

  • 通过配置,Ingress可为Service提供外部可访问的URL、对其流量作负载均衡、SSL/TLS,以及基于名称的虚拟托管等能力。Ingress控制器负载完成Ingress的工作,具体实现上通常会使用某个负载均衡器,不过也可以配置边缘路由器或其他前端来帮助处理流量。

  • Ingress不会随意公开端口或协议。将HTTP和HTTPS以外的服务开放到Ingress时,通常使用Service.Type=NodePortService.Type=LoadBalancer类型的Service。

1.2、Ingress术语

  • 为了表达更加清晰,本指南定义以下术语:
    • 节点(Node):Kubernetes集群中的一台工作机器,是集群的一部分。
    • 集群(Cluster):一组运行容器化应用程序的Node,这些应用由Kubernetes管理。在此示例和在大多数常见的Kubernetes部署环境中,集群中的节点都不在公共网路中。
    • 边缘路由器(Edge Router):在集群中强制执行防火墙策略的路由器。可以是由云提供商管理的网关,也可以是物理硬件。
    • 集群网络(Cluster Network):一组逻辑的或物理的链接,基于Kubernetes网络模型实现集群内的通信。
    • 服务(Service):Kubernetes服务(Service),使用标签算符(Selectors)来选择一组Pod。除非另作说明,否则假定Service具有只能在集群网络内路由的虚拟IP。

1.3、Ingress类型

  • Ingress中的每个路径都需要有对应的路径类型(Path Type)。未明确设置pathType的路径无法通过合法性检查。当前支持的路径类型有三种:
    • ImplementationSpecific:对于这种路径类型,匹配方法取决于IngressClass(类)。具体实现可以将其作为单独的pathType处理或者作与PrefixExact类型相同的处理。
    • Exact:精确匹配URL路径,且区分大小写。
    • Prefix:基于以/分隔的URL路径前缀匹配。匹配区分大小写,并且对路径中各个元素逐个执行匹配操作。路径元素指的是由/分隔符分隔的路径中的标签列表。如果每个p都是请求路径p的元素前缀,则请求与路径p匹配。

二、Ingress详细

  • 你必须有一个Ingress控制器才能满足Ingress的要求。仅创建Ingress资源本身没有任何效果。

2.1、部署Nginx-Ingress控制器

  • 你可以部署一个Ingress控制器,例如ingress-nginx。你可以从许多Ingress控制器中选择。
  • 理想情况下,所有Ingress控制器都遵从参考规范。但实际上,各个Ingress控制器操作略有不同。
[root@master ~]# kubectl apply -f deploy.yaml 

2.2、最小Ingress资源

[root@master ingress]# cat ingress.yaml 
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  annotations:  # 添加注解
    nginx.ingress.kubernetes.io/rewrite-target: "/"  # 被此ingress路由的请求,都将会被重定向到网站根(/)目录下的内容。
    # kubectl get ingressclasses.networking.k8s.io此命令可以查看你的ingres类,NAME字段就是你的ingress类
    kubernetes.io/ingress.class: "nginx"  # 指定 ingress 类,表示这个ingress资源被哪个ingress控制器处理
spec:
  rules:  # ingress规则
  - http:   # 基于http规则
      paths:
      - path: /testpath   # 访问路由如 http://ip/testpath,将会被重定向到网站根目录
        pathType: Prefix  # Ingress类型,前缀匹配
        backend:   # 后端服务
          service:   
            name: test  # 指定Service,Ingress匹配的请求将会转发到此test Service上
            port:
              number: 80  # 执行Service的端口
# 以下是一个完整的Ingress代理后端Serivce并且访问Pod的案例
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

---

apiVersion: "v1"
kind: Service
metadata:
  name: test
spec:
  selector:  # 标签选择器
    app: nginx   # 指定后端服务Pod,把流量路由到带有app=nginx的后端Pod上
  type: ClusterIP  # 使用了Ingress,此处的svc的类型写为ClusterIP是一个规范的用法
  ports:
  - port: 80  # 对外暴露80端口
    targetPort: 80  # 此处填写容器真实暴露出来的端口,流量将会被路由到这个端口上


---


apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  labels:
    app: nginx
  annotations:  # 添加注解
    nginx.ingress.kubernetes.io/rewrite-target: "/"  # 被此ingress路由的请求,都将会被重定向到网站根(/)目录下的内容。
    # kubectl get ingressclasses.networking.k8s.io此命令可以查看你的ingres类,NAME字段就是你的ingress类
    kubernetes.io/ingress.class: "nginx"  # 指定 ingress 类,表示这个ingress资源被哪个ingress控制器处理
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend: 
          service: 
            name: test
            port:
              number: 80
              
       
# 你可以通过查看Ingress控制器的IP地址来进行流量匹配从而访问到后端Service
[root@master ingress]# kubectl describe pod -n ingress-nginx ingress-nginx-controller-6cd89cfd57-px9vg | grep IP:
IP:           192.168.93.147


# 流量匹配访问测试
# 你也可以在集群外部进行访问
C:\Users\Lenovo>curl http://192.168.93.147/testpath
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

2.3、Ingress规则

  • 每个HTTP规则都包含以下信息:
    • 可选的host。在上面的例子中,未指定host,因此该规则基于所有指定IP地址来匹配所有入栈HTTP流量。如果提供了host(例如foo.bar.com),则rules适用于所指定的主机。
    • 路径列表(例如/testpath)。每个路径都有一个由service.nameservice.port.number确定的关联后端。主机和路径都必须与入栈请求的内容相匹配,负载均衡器才会将流量引导到所引用的Service上。
    • backend(后端):是Service文档中所属的Service和端口名称的组合,或者是通过CRD方式来实现的自定义资源后端。对于发往Ingress的HTTP(和HTTPS)请求,如果与规则中主机和路径匹配,则会被发送到所列出的后端。

三、一个域名多个访问路径多SVC

  • 可以理解为简单扇出配置根据请求的HTTP URI将来自同一IP地址的流量路由到多个Service。Ingress允许你将负载均衡器的数量降至最低。例如,这样设置:
    在这里插入图片描述

图.ingress扇出

  • 这样需要一个如下的Ingress:
[root@master ingress]# cat ingress.yaml
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  labels:
    app: nginx
  annotations: 
    nginx.ingress.kubernetes.io/rewrite-target: "/"  
    kubernetes.io/ingress.class: "nginx"  
spec:
  rules:
  - host: foo.bar.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /foo  
        pathType: Prefix
        backend: 
          service: 
            name: service1
            port:
              number: 80
      - path: /bar  
        pathType: Prefix
        backend: 
          service: 
            name: service2
            port:
              number: 80
# 查看ingres
[root@master ingress]# kubectl get ingress
NAME           CLASS    HOSTS         ADDRESS   PORTS   AGE
mini-ingress   <none>   foo.bar.com             80      27m



# 查看ingress详细信息
[root@master ingress]# kubectl get ingress
NAME           CLASS    HOSTS         ADDRESS   PORTS   AGE
mini-ingress   <none>   foo.bar.com             80      27m
[root@master ingress]# kubectl describe ingress mini-ingress 
Name:             mini-ingress
Labels:           app=nginx
Namespace:        default
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com  
########################################################
               /foo   service1:80 (10.244.1.3:80)
               /bar   service2:80 (10.244.1.3:80)
########################################################
Annotations:   kubernetes.io/ingress.class: nginx
               nginx.ingress.kubernetes.io/rewrite-target: /
Events:
  Type    Reason  Age                 From                      Message
  ----    ------  ----                ----                      -------
  Normal  Sync    3m3s (x2 over 27m)  nginx-ingress-controller  Scheduled for sync
  • 此时Ingress控制器构造一个特定于实现的负载均衡来供Ingress使用,前提是Service(Service1、Service2)存在。

四、多域名Ingress

  • 基于域名的虚拟主机支持将针对多个主机名的HTTP流量路由到同一IP地址上。
    在这里插入图片描述

图.基于域名实现虚拟托管的Ingress

  • 以下Ingress让后台负载均衡器基于host头部字段来路由请求
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  labels:
    app: nginx
  annotations:  # 添加注解
    # nginx.ingress.kubernetes.io/rewrite-target: "/"  # 被此ingress路由的请求,都将会被重定向到网站根(/)目录下的内容。
    # kubectl get ingressclasses.networking.k8s.io此命令可以查看你的ingres类,NAME字段就是你的ingress类
    kubernetes.io/ingress.class: "nginx"  # 指定 ingress 类,表示这个ingress资源被哪个ingress控制器处理
spec:
  rules:
  - host: www.svc1.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service1
            port:
              number: 80
  - host: www.svc2.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service2
            port:
              number: 80
# 查看Ingress资源,将会看到HOSTS字段会有两个域名
[root@master ingress]# kubectl get ingress
NAME           CLASS    HOSTS                       ADDRESS   PORTS   AGE
mini-ingress   <none>   www.svc1.com,www.svc2.com             80      44m
# 完整资源清单
apiVersion: "v1"
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

---

apiVersion: "v1"
kind: Service
metadata:
  name: service1
spec:
  selector:  # 标签选择器
    app: nginx   # 指定后端服务Pod,把流量路由到带有app=nginx的后端Pod上
  type: ClusterIP
  ports:
  - port: 80  # 对外暴露80端口
    targetPort: 80  # 此处填写容器真实暴露出来的端口,流量将会被路由到这个端口上

---
apiVersion: "v1"
kind: Service
metadata:
  name: service2
spec:
  selector:  # 标签选择器
    app: nginx   # 指定后端服务Pod,把流量路由到带有app=nginx的后端Pod上
  type: ClusterIP
  ports:
  - port: 80  # 对外暴露80端口
    targetPort: 80  # 此处填写容器真实暴露出来的端口,流量将会被路由到这个端口上
    
---

apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  labels:
    app: nginx
  annotations:  # 添加注解
    # nginx.ingress.kubernetes.io/rewrite-target: "/"  # 被此ingress路由的请求,都将会被重定向到网站根(/)目录下的内容。
    # kubectl get ingressclasses.networking.k8s.io此命令可以查看你的ingres类,NAME字段就是你的ingress类
    kubernetes.io/ingress.class: "nginx"  # 指定 ingress 类,表示这个ingress资源被哪个ingress控制器处理
spec:
  rules:
  - host: www.svc1.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service1
            port:
              number: 80
  - host: www.svc2.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service2
            port:
              number: 80
# 做域名解析即可访问
[root@master ingress]# echo "192.168.93.147 www.svc1.com" >> /etc/hosts
[root@master ingress]# echo "192.168.93.147 www.svc2.com" >> /etc/hosts


[root@master ingress]# curl http://www.svc1.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
...


[root@master ingress]# curl http://www.svc2.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
...

五、转发到默认Service

  • 下面的Ingress对象会将请求www,svc1.com的流量路由到service1,将请求www.svc2.com的流量路由到service2,而将所有其他流量路由到service3
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  labels:
    app: nginx
  annotations:  # 添加注解
    kubernetes.io/ingress.class: "nginx"  # 指定 ingress 类,表示这个ingress资源被哪个ingress控制器处理
spec:
  rules:
  - host: www.svc1.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service1
            port:
              number: 80
  - host: www.svc2.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service2
            port:
              number: 80
# 其他规则路由到service3上
  - http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: service3
            port:
              number: 80

六、TLS证书加密

  • 你可以通过设定包含TLS私钥和证书的Secret(用于存储敏感信息,如密码、OAuth令牌和SSH密钥)来保护Ingress。Ingress资源只支持一个TLS端口443,并假定TLS连接终止于Ingress节点(与Service及其Pod间的流量都以明文传输)。如果Ingress中的TLs配置部署制定了不同主机,那么它们将通过SNI TLS扩展指定的主机名(如果Ingress控制器支持SNI)在同一端口上进行复用。TLS Secret的数据中必须包含键名为tls.crt的证书和键名为tls.key的私钥,才能用于TLS目的。

6.1、创建Openssl生成证书

  • openssl是目前最流行的SSL密码库工具,其提供了以恶通用、健壮、功能完备的工具套件,用以支持SSL/TLS协议的实现。
# 创建证书存放路径
[root@master ingress]# mkdir /usr/local/ssl


# 生成证书
[root@master ingress]# openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt
Generating a 2048 bit RSA private key
..........+++
...................................+++
writing new private key to '/usr/local/ssl/nginx.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HE
Locality Name (eg, city) [Default City]:Zheng Zhou
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:localhost
Email Address []:

# openssl req生成证书
# -x509 输出 x509 结构而不是证书。
# -nodes 不加密输出密钥
# -days -x509 生成的证书的有效天数。
# -newkey rsa:2048 生成大小为"位"的新 RSA 密钥
# -keyout 要将密钥发送到的文件
# -out 输出文件

6.2、base64加密证书数据

# 公钥
[root@master ingress]# base64 /usr/local/ssl/nginx.crt 
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURsekNDQW4rZ0F3SUJBZ0lKQVArSUF0Tmla
RHI5TUEwR0NTcUdTSWIzRFFFQkN3VUFNR0V4Q3pBSkJnTlYKQkFZVEFrTk9NUXN3Q1FZRFZRUUlE
QUpJUlRFVE1CRUdBMVVFQnd3S1dtaGxibWNnV21odmRURWNNQm9HQTFVRQpDZ3dUUkdWbVlYVnNk
Q0JEYjIxd1lXNTVJRXgwWkRFU01CQUdBMVVFQXd3SmJHOWpZV3hvYjNOME1DQVhEVEkwCk1EZ3hO
REV6TWprek1sb1lEekl4TWpRd056SXhNVE15T1RNeVdqQmhNUXN3Q1FZRFZRUUdFd0pEVGpFTE1B
a0cKQTFVRUNBd0NTRVV4RXpBUkJnTlZCQWNNQ2xwb1pXNW5JRnBvYjNVeEhEQWFCZ05WQkFvTUUw
UmxabUYxYkhRZwpRMjl0Y0dGdWVTQk1kR1F4RWpBUUJnTlZCQU1NQ1d4dlkyRnNhRzl6ZERDQ0FT
SXdEUVlKS29aSWh2Y05BUUVCCkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1rcTl2bGxlYW9HUFphVVcy
WEVRZmtBL0tNS0NsS2xnMVhwZHNaUEVRNVgKZk1uaG1WRkRabVlwWW9vL2NYcHo5YW10R0FMNk8x
TTd2M3E3UFFQY0Z4M2htOHRvQ1kxMmlPYnZXd2VQQjNTeQo5enhhbDZrdDhhZVlDVzdGYlowb1pi
ZXVzRzhtRHloWlJPczQyaHpOckZFQjB3QnorVFJpYkptWWx3dDhGUy9NCnNsUFVENTZyUDZBeGRq
bStRWHRrU1d5dDNqK1IrblZ1aFBYY1F6bVlZaWJ3TzJyYnJ4VG9GcjVlV1ZwbHlDSisKZElDTjlY
Y0o2dmx5M2t5SGVNQlJuU01iR2J1Tm1DRkJGcjlwdS80OW16MGwvN2MvVnY4Yk9Dc0NUeXJWYjBu
KwpBVlZFeVdGRjNUNXo5cjZBc2ltbDhjbVZIL3hYNHovaDNSdkV6T052UGJrQ0F3RUFBYU5RTUU0
d0hRWURWUjBPCkJCWUVGUG14bHlDYXRlZTJKZld0NWd4RWVUaE9kb3N1TUI4R0ExVWRJd1FZTUJh
QUZQbXhseUNhdGVlMkpmV3QKNWd4RWVUaE9kb3N1TUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29a
SWh2Y05BUUVMQlFBRGdnRUJBSllDWXNLWQoyOHBIM1htcm9mT1plUUl1STd1QWpUQ3kxVFpWeHU1
bzJSVGJacDRKd2lQMkpSQWlUWGlkYU16aDE5RGVob2M1CkFTZ0ZKeW5QNU1SNzYvcGhKQ1FjeVNF
bG9KL2V5Z09TcTdLUWpBaCtPZnAyT0g4bXZqby9uMHZBdkI3L21nWEoKRU8rQjZXQTd6b2VocnF6
R0hwZ3RvekovY1hGOEFQRDU4b1BGc3RteC9jYkdaQjBYekRJMXJ0SXpJZG1YVmxUegpZejBnU0RR
aVh4Mkg1QlN2TGo0eHRIMlh6ODlXQ052TlU2TGpySTk3QTk4N0xkSWNvK2lOVVlKQWxLSnpyd3JQ
CkhUQjVSZG9tNWZBbXRrZG1DbWlYTGlKenE0UEVLdm9GaHVvdDI1bmN6a3h0bUd3NWN5cFZlNlc5
clRXdWhlUS8KU2Y2UzA2OTFhWURTaTZnPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
# 私钥
[root@master ingress]# base64 /usr/local/ssl/nginx.key 
LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZB
QVNDQktnd2dnU2tBZ0VBQW9JQkFRREpLdmI1WlhtcUJqMlcKbEZ0bHhFSDVBUHlqQ2dwU3BZTlY2
WGJHVHhFT1Yzeko0WmxSUTJabUtXS0tQM0Y2Yy9XcHJSZ0MranRUTzc5Ngp1ejBEM0JjZDRadkxh
QW1OZG9qbTcxc0hqd2Qwc3ZjOFdwZXBMZkdubUFsdXhXMmRLR1czcnJCdkpnOG9XVVRyCk9Ob2N6
YXhSQWRNQWMvazBZbXlabUpjTGZCVXZ6TEpUMUErZXF6K2dNWFk1dmtGN1pFbHNyZDQva2ZwMWJv
VDEKM0VNNW1HSW04RHRxMjY4VTZCYStYbGxhWmNnaWZuU0FqZlYzQ2VyNWN0NU1oM2pBVVowakd4
bTdqWmdoUVJhLwphYnYrUFpzOUpmKzNQMWIvR3pnckFrOHExVzlKL2dGVlJNbGhSZDArYy9hK2dM
SXBwZkhKbFIvOFYrTS80ZDBiCnhNempiejI1QWdNQkFBRUNnZ0VBYjIrdGdGb0dHM2w1aElDS1lN
Vm5CbGpWbWp0bG5JS3pUbFFWeDZUay9kelkKODd4VkFmOGtLbE9pa3BLeWVmTGlreXVmc1lhTWRu
OFNneHBWb2wyNU1JUlptVVA0aHJTekFicDE0cW9JcDB5OApTR0ttd01FQ3JLUThGWENvVi9hWTRq
ZVM1UDlnUmltdFUrQWFjdm84Q21QSVR1ZnZsR1V4WTZSemg1a2s0MlMxCnRYN0NXSHBkS05Fb1M1
M3dHVS9rNVNpeGZrTzRNUmJEemloaFRPcDVwYUpINWxQOTh6T0NjdnZLUW9WNUt1R0QKeUVVeS9v
dS91eCtoalplYnhVV3VScnhrckN6WkhuQlFTSXA3NDk0Z0ZmbXkxSms1aTVlVnRuN0MzWUIxN3Rv
aAp2VDZIanBRWWxRM2JsYWlrdUJCK2RrZU9sSERvekZaeS9kRDVvT3hBQVFLQmdRRGxDbk5tanJV
NFFDWENEVk5DCi84YUtyQ1RyeE1IZDUwTkpMME12MjdUeTRaaEU0ZWFnSHZjVlg4YUxXQjFLcXN1
aENPUVRnU2lSZlFmeFNkUHYKOUJqVERSTGxLdXhLKzNYSWlhdzd2VWRKZFh0bkMyVHpSbjBCcTV3
QldjcXJBRHpuTGZSVFZOemJyK2crOGZKQwo1d1BlSGpHUnpkQzh3YWtNaERzdWxRaGFPUUtCZ1FE
ZzJLSkU3MzJhMEtndkxQQW9aeFVEaWl1WURzMTRsaS9UCkp2bzR5WTJrTDE4V29TRjdPTlljOTBI
MjNRMkRWUHhsdTRWY1dXYWJxblJ0TXdua2J3U2pvMU9hMWp0Kzc4d2EKc3dOTzlmbktCY09VMk9Y
cEtNSVZBSTJBUnBVUTVyR0hOQS9IVFlwMjhYS3FrdDk3alovLy9YdXFhbzN3ZUNKNgo3WHQyZHpQ
L2dRS0JnUUNpaFNyam4rbVpFM04zWVlzdUpGNFdNaFkwc2JXNnBvbkpHVjg4UzFMM2NQcGlEa1Zl
Cll2cUNVU2FKNDZsTlBTb21oeStIWTRPTTBNSmRCVHo4ckNFZFNNNmFqRDJFNnk5bGI4TWwxS1lM
eXZBWWF5NWoKclNXd2xMdXEvYkxnYWRmTlZuOWl6Zm0xYlBtSUNKZ1Z2dVN3ckk0UjNvLzZFQlRM
QzkwT3JiTnlpUUtCZ0g1VgpXajl2Yk55S3RxVGpGQUV2Z2lBZUIwYUZzcTg1ZTUraGUrQmlad0pF
VjZJb1lONlNYY09pcmQ2ZDc1VEdNSmFjCm1WNzlJR2tBaWpBOUNDYmd0Zk9YdGtiK2JpbHhaUFh2
ZFVGdGRhOHNNK3N6UDJNVk1vK0lZdmtiTDNCeW5uY0EKS29scUtRMlJ0a0xmQ1ZDcmo2WE84Q2dk
ZktrTFp4dzR5VEVUNHhTQkFvR0JBSmRidWdkb0E5ZmhRKzlIRDQwNQpkWVlJSzNWUHAvVm11dmNX
N0QzQk82dVlNVzlmT0tpcEpaemlYN3BwK3pVVHN0WTVmUUp5N3ZnZXNwSElIdTZkClBpOUZzVEp5
TUt6QWdtZVJVRFU1Q0NMaURuNmpGQXpZeVR6YVo0ME0rdWZhZmVuYUxhNDMrY00vMDdTRUFSM0YK
bUZ3ZHVrRG1vZFk4bWp0KytZU3paRlNkCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K

6.3、创建Secret存储

[root@master ingress]# cat secret.yaml 
apiVersion: "v1"
kind: Secret
metadata:
  name: nginx-https-tls
  namespace: default
data:
  tls.crt: # base64加密的公钥数据放到此位置
  tls.key: # base64加密的私钥数据放到此位置
type: kubernetes.io/tls
# 部署资源
[root@master ingress]# kubectl apply -f secret.yaml 
secret/nginx-https-tls created

6.4、配置Ingress资源

  • 在Ingress中引用此Secret将会告诉Ingress控制器使用ELS加密从客户端到负载均衡器的通道。
  • 注意:不能针对默认规则适用TLS,因为这样做需要为所有可能的子域名签发证书。因此tls字段中的hosts的取值需要与字段中的host完全匹配。
[root@master ingress]# cat ingress.yaml
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: mini-ingress
  labels:
    app: nginx
  annotations:  # 添加注解
    kubernetes.io/ingress.class: "nginx"  # 指定 ingress 类,表示这个ingress资源被哪个ingress控制器处理
spec:
  tls:   # 添加TLs
  - hosts:
      - www.svc1.com   # 针对这个域名
  rules:
  - host: www.svc1.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service1
            port:
              number: 80
  - host: www.svc2.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: /
        pathType: Prefix
        backend: 
          service: 
            name: service2
            port:
              number: 80

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue的网上购物商城系统研发

基于JavaSpringBootVue的网上购物商城系统研发 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f3…

排序算法【希尔排序】

一、原理 &#xff08;1&#xff09;步长为4时候的插入排序 &#xff08;2&#xff09;步长为2的时候的插入排序 &#xff08;3&#xff09;步长为1的时候的插入排序 二、代码如下所示&#xff1a; #ifndef __TEST_H__ #define __TEST_H__ #include <string.h> #include…

【IEEE出版,华中科技大学主办】2024年电气工程自动化与信息处理国际会议(EEAIP 2024,9月20-22)

2024年电气工程自动化与信息处理国际会议&#xff08;EEAIP 2024&#xff09;作为第四届能源、动力与电气工程国际学术会议&#xff08;EPEE 2024&#xff09;的分会场&#xff0c;将于2024年9月20-22日在中国武汉举行。 本届主会&#xff08;EPEE 2024&#xff09;由华中科技大…

【Python - 爬虫】SSLError 错误:处理 HTTPS 请求中的 SSLError 问题

文章目录 一、SSLError 错误概述1. 错误的产生2. 常见的错误信息 二、SSLError 的可能原因分析1. 代理配置问题2. 网络传输问题3. 证书问题 三、解决方案与最佳实践1. 配置代理2. 通过系统代理3. 使用 requests.Session 管理请求4. 临时禁用代理 四、其他解决方法1. 更新证书2.…

4.4 数据查询语言(DQL):复杂查询与连接操作

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

【Redis】Redis典型应用-分布式锁

目录 什么是分布式锁&#xff1f; 分布式锁的基础实现 引入过期事件 引入校验ID 引入lua 引入watch dog&#xff08;看门狗&#xff09; 引⼊ Redlock 算法 什么是分布式锁&#xff1f; 在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要…

访非洲 助公益 促和平 朱共山妻子杨燕女士勇担社会责任

作为协鑫集团董事长朱共山先生的夫人&#xff0c;杨燕女士一直以其卓越的社会责任感和对公益事业的热忱著称。近些年&#xff0c;杨燕女士前往非洲访问&#xff0c;旨在加强中非之间的友好交流&#xff0c;支持我国传统书画事业发展&#xff0c;并促进地区的和平与稳定。朱共山…

AI大模型入门基础教程(非常详细),AI大模型入门到精通,收藏这一篇就够了!

什么是 AI大模型&#xff1f; AI大模型是指使用大规模数据和强大的计算能力训练出来的人工智能模型。 这些模型通常具有高度的准确性和泛化能力&#xff0c;可以应用于各种领域&#xff0c;如自然语言处理、图像识别、语音识别等。 为什么要学AI大模型&#xff1f; 2024人工…

【Hot100】LeetCode—189. 轮转数组

目录 1- 思路自定义 reverse 翻转函数 2- 实现⭐189. 轮转数组——题解思路 3- ACM 实现 原题链接&#xff1a;189. 轮转数组 1- 思路 自定义 reverse 翻转函数 2- 实现 ⭐189. 轮转数组——题解思路 class Solution {public void rotate(int[] nums, int k) {k % nums.lengt…

瑞友科技项目经理认证负责人杨文娟受邀为第四届中国项目经理大会演讲嘉宾︱PMO评论

全国项目经理专业人士年度盛会 北京瑞友科技股份有限公司项目经理认证负责人杨文娟女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“瑞友科技项目经理人才培养体系落地实践”。大会将于10月26-27日在北京举…

HCIP-HarmonyOS Application Developer 习题(三)

1、在JS(JavaScript)Ul框架中&#xff0c;完成对平台层进行抽象&#xff0c;提供抽象接口&#xff0c;对接到系统平台的是哪一层? A. 应用层 B. 前端框架层 C. 引擎层 D. 平台适配层 答案&#xff1a;D 分析&#xff1a;适配层主要完成对平台层进行抽象&#xff0c;提供抽象接…

在亚马逊云科技上部署Llama大模型并开发负责任的AI生活智能助手

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技上利用Sag…

​R语言里的字符型向量和布尔型向量运用

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 3章1节&#xff1a;数据的基本概念以及 R 中的数据结构、向量与矩阵的创建及运算-CSDN…

【机器学习】反向传播的基本概念、如何优化反向传播算法以及大量样本如何优化反向传播

引言 反向传播算法是深度学习和机器学习中的一个核心概念&#xff0c;主要用于训练神经网络 文章目录 引言一、反向传播算法的基本概念1.1 反向传播算法的基本原理1.2 前向传播1.3 计算误差1.4 反向传播1.5 应用与挑战1.6 神经元模型和神经网络结构1.7 总结 二、如何优化反向传…

JavaScript基础——函数

函数简介 定义函数 调用函数 函数的参数和返回值 函数参数 1.有形参情况下不传递实参 2.传递数量少于形参个数的实参 3.传递数量等于形参个数的实参 函数返回值 报错Uncaught SyntaxError: Illegal return statement 返回数字和字符串 返回数组、对象和函数 没有返回…

史上最快,仅需10ms的动态点云剔除方法

论文题目&#xff1a; A Fast Dynamic Point Detection Method for LiDAR-Inertial Odometry in Driving Scenarios 论文作者&#xff1a; Zikang Yuan, Xiaoxiang Wang, Jingying Wu, Junda Cheng, Xin Yang 导读&#xff1a; 本文实现了一种十分快速的动态点剔除方法&…

python 数据可视化折线图练习(下:代码演示)

根据上篇对三国疫情情况数据的罗列&#xff0c;构建折线图完成数据展示。&#xff08;示例如下&#xff09; 接下来是具体代码演示 import json from pyecharts.charts import Line from pyecharts.options import TitleOpts , LegendOpts , ToolboxOpts ,VisualMapOpts , T…

vue 3d echarts scatter3D元素塌陷,图标塌陷进地图完美解决方案

当我们手机用 scatter3D 类型时&#xff0c;最小值因为渲染问题会塌陷进模型里面&#xff0c;所以只要让value固定&#xff0c;再将label formatter 配合 boxHeight属性即可解决&#xff0c;&#xff08;代码附带自定义label图标解决办法&#xff09; 解决&#xff1a; <…

np.pad各种方式的图文解释

‘constant’——表示连续填充相同的值&#xff0c;每个轴可以分别指定填充值&#xff0c;constant_values&#xff08;x,y&#xff09;时前面用x填充&#xff0c;后面用y填充&#xff0c;缺省值填充0 ‘edge’——表示用边缘值填充 ‘linear_ramp’——表示用边缘递减的方式填…

Windows编程:图标资源、光标资源、字符串资源、加速键资源、WM_PAINT消息、绘图

承接前文&#xff1a; win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列win32-鼠标消息、键盘消息、计时器消息、菜单资源 本文目录 图标资源光标资源WM_SETCURSOR 消息 字符串资源加速键资源WM_PAINT 消息绘图绘图编程绘图基础基…