k8s之ingress定义https访问方式

ini 复制代码
接上文:https://blog.csdn.net/soso678/article/details/149607069?spm=1001.2014.3001.5502

定义后端应用与service

ini 复制代码
[root@master ingress]# cat my-nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-nginx
spec:
 selector:
   matchLabels:
     run: my-nginx
 replicas: 2
 template:
  metadata:
   labels:
    run: my-nginx
  spec:
   containers:
   - name: my-nginx
     image: nginx
     imagePullPolicy: IfNotPresent
     ports:
     - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
 name: my-nginx
 labels:
  run: my-nginx
spec:
 ports:
  - port: 80
    targetPort: 80
 selector:
  run: my-nginx

定义secret

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

ini 复制代码
先对购买的证书进行base64编码
[root@master ssl]# cat ssl.key | base64 -w 0
[root@master ssl]# cat ssl.crt | base64 -w 0

将证书定义成secret
[root@master ssl]# cat ssl-secret.yml
apiVersion: v1
kind: Secret
metadata:
  name: secret-tls
type: kubernetes.io/tls
data:
  tls.crt: base64 编码的证书
  tls.key: base64 编码的私钥
  
[root@master ssl]# kubectl apply -f ssl-secret.yml 
secret/secret-tls created
[root@master ssl]# kubectl get secret 
NAME                  TYPE                                  DATA   AGE
secret-tls            kubernetes.io/tls                     2      3s

定义ingress转发规则

在 Ingress 中引用此 Secret 将会告诉 Ingress 控制器使用 TLS 加密从客户端到负载均衡器的通道。 你要确保所创建的 TLS Secret 创建自包含 https-example.foo.com 的公共名称 (Common Name,CN)的证书。这里的公共名称也被称为全限定域名(Fully Qualified Domain Name,FQDN)。

说明:

注意,不能针对默认规则使用 TLS,因为这样做需要为所有可能的子域名签发证书。 因此,tls 字段中的 hosts 的取值需要与 rules 字段中的 host 完全匹配。

ini 复制代码
[root@master ssl]# cat nginx-ingress.yml 
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
 name: test-https-ingress
spec:
 ingressClassName: nginx
 tls:
  - hosts:
     - www.test-nginx.com
    secretName: secret-tls
 rules:
 - host: www.test-nginx.com
   http:
    paths:
    - path: /
      pathType: Prefix
      backend:
       service:
         name: my-nginx
         port:
          number: 80
[root@master ssl]# kubectl apply -f nginx-ingress.yml 
ingress.networking.k8s.io/test-https-ingress created
[root@master ssl]# kubectl get ingress
NAME                 CLASS   HOSTS                ADDRESS   PORTS     AGE
test-https-ingress   nginx   www.test-nginx.com             80, 443   4s

nginx-ingress-controller运行在node1,node2两个节点上。

如果网络中有dns服务器,在dns中把这两个域名映射到nginx-ingress-controller运行的任意一个节点上,如果没有dns服务器只能修改host文件了。

任意一个节点上操作:(客户端解析)

我这里有两个节点部署了控制器,ip分别为172.16.229.7,172.16.229.8 ,如果有多个,可以随便选。

在wind电脑设置本地解析

ini 复制代码
172.16.229.7 www.test-nginx.com
相关推荐
程序喵大人2 小时前
【C++进阶】STL容器与迭代器 - 05 map 和 set 为什么按键保持有序
开发语言·c++·容器·迭代器·stl
风曦Kisaki3 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳3 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
Chengbei115 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Ai拆代码的曹操6 小时前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操6 小时前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
2501_915909067 小时前
iOS应用性能监控 Instruments工具与崩溃日志分析完整指南
android·ios·小程序·https·uni-app·iphone·webview
张忠琳7 小时前
【NVIDIA】k8s-device-plugin v0.19.3 — CDI / MIG / vGPU 模块超深度代码分析之五
云原生·容器·架构·kubernetes·nvidia
冷莫溪7 小时前
Docker——3.Harbor 核心架构与原理详解
docker·容器·架构
IT二叔20 小时前
Kubernetes(K8s)-01-简介
云原生·容器·kubernetes