34-Ingress

一、svc和Ingress的区别

svc和Ingress本质上都是实现服务发现的资源类型。

svc主要实现方式是基于四层负载实现。

而Ingress基于七层负载实现。但Ingress的实现需要单独部署第三方组件。

二、Ingress和IngressClass

Ingress是K8S集群内置的资源,本质上是配置文件,将域名解析到对应的svc。
IngressClass可以解读k8s的Ingress资源,从而翻译为能识别的配置文件,对外部用户提供访问路由。

三、基于helm部署Ingress-nginx实战

1.Ingress-Nginx概述

Ingress-Nginx是K8S官方写的一个Ingress Controller,而"nginx-Ingress"是Nginx官方写的资源清单。

注意,部署时要观察对比一下K8S和Ingress-Nginx对应的版本以来关系哟。

github地址:
	https://github.com/kubernetes/ingress-nginx

安装文档:
	https://kubernetes.github.io/ingress-nginx/deploy/#installation-guide
	
	
如上图所示,官方推荐了三种安装方式:
	- 使用"helm"安装;
	- 使用"kubectl apply"创建yaml资源清单的方式进行安装;
	- 使用第三方插件的方式进行安装;

2.添加第三方仓库

[root@master231 helm]# helm repo add dingzhiyan-ingress https://kubernetes.github.io/ingress-nginx
"dingzhiyan-ingress" has been added to your repositories
[root@master231 helm]# 
[root@master231 helm]# helm repo list
NAME             	URL                                       
dingzhiyan-ingress	https://kubernetes.github.io/ingress-nginx
[root@master231 helm]# 

3.搜索Ingress-nginx的Chart

[root@master231 helm]# helm search repo ingress-nginx
NAME                           	CHART VERSION	APP VERSION	DESCRIPTION                                       
dingzhiyan-ingress/ingress-nginx	4.12.0       	1.12.0     	Ingress controller for Kubernetes using NGINX a...
[root@master231 helm]# 
[root@master231 helm]# 
[root@master231 helm]# helm search repo ingress-nginx -l
NAME                           	CHART VERSION	APP VERSION	DESCRIPTION                                       
dingzhiyan-ingress/ingress-nginx	4.12.0       	1.12.0     	Ingress controller for Kubernetes using NGINX a...
...
dingzhiyan-ingress/ingress-nginx	4.5.2        	1.6.4      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.5.0        	1.6.3      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.4.2        	1.5.1      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.4.0        	1.5.1      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.3.0        	1.4.0      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.2.5        	1.3.1      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.2.4        	1.3.1      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.2.3        	1.3.0      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.2.2        	1.3.0      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.2.1        	1.3.0      	Ingress controller for Kubernetes using NGINX a...
dingzhiyan-ingress/ingress-nginx	4.2.0        	1.3.0      	Ingress controller for Kubernetes using NGINX a...
...
[root@master231 helm]# 

4.下载指定的Chart

[root@master231 helm]# helm pull dingzhiyan-ingress/ingress-nginx --version 4.2.5

5.解压软件包并修改配置参数

[root@master231 helm]# tar xf ingress-nginx-4.2.5.tgz 
[root@master231 helm]# 
[root@master231 helm]# sed -i '/registry:/s#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com#g' ingress-nginx/values.yaml
[root@master231 helm]# sed -i 's#ingress-nginx/controller#yinzhengjie-k8s/ingress-nginx#' ingress-nginx/values.yaml 
[root@master231 helm]# sed -i 's#ingress-nginx/kube-webhook-certgen#yinzhengjie-k8s/ingress-nginx#' ingress-nginx/values.yaml
[root@master231 helm]# sed -i 's#v1.3.0#kube-webhook-certgen-v1.3.0#' ingress-nginx/values.yaml
[root@master231 helm]# sed -ri '/digest:/s@^@#@' ingress-nginx/values.yaml
[root@master231 helm]# sed -i '/hostNetwork:/s#false#true#' ingress-nginx/values.yaml
[root@master231 helm]# sed -i  '/dnsPolicy/s#ClusterFirst#ClusterFirstWithHostNet#' ingress-nginx/values.yaml
[root@master231 helm]# sed -i '/kind/s#Deployment#DaemonSet#' ingress-nginx/values.yaml 
[root@master231 helm]# sed -i '/default:/s#false#true#'  ingress-nginx/values.yaml

温馨提示:
	- 修改镜像为国内的镜像,否则无法下载海外镜像,除非你会FQ;
	- 如果使用我提供的镜像需要将digest注释掉,因为我的镜像是从海外同步过来的,被重新构建过,其digest不一致;
	- 建议大家使用宿主机网络效率最高,但是使用宿主机网络将来DNS解析策略会直接使用宿主机的解析;
	- 如果还想要继续使用K8S内部的svc名称解析,则需要将默认的"ClusterFirst"的DNS解析策略修改为"ClusterFirstWithHostNet";
	- 建议将Deployment类型改为DaemonSet类型,可以确保在各个节点部署一个Pod,也可以修改"nodeSelector"字段让其调度到指定节点;
	- 如果仅有一个ingress controller,可以考虑将"ingressClassResource.default"设置为true,表示让其成为默认的ingress controller;

6.安装ingress-nginx

[root@master231 ingress-nginx]# helm upgrade --install ing-class-linux96 ingress-nginx -n ingress-nginx --create-namespace
Release "ing-class-linux96" does not exist. Installing it now.
NAME: ing-class-linux96
LAST DEPLOYED: Mon Apr 21 11:50:25 2025
NAMESPACE: ingress-nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace ingress-nginx get services -o wide -w ing-class-linux96-ingress-nginx-controller'

An example Ingress that makes use of the controller:
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: example
    namespace: foo
  spec:
    ingressClassName: nginx
    rules:
      - host: www.example.com
        http:
          paths:
            - pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port:
                    number: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls
[root@master231 ingress-nginx]# 

7.验证Ingress-nginx是否安装成功

[root@master231 ingress-nginx]#  helm list -n ingress-nginx 
NAME             	NAMESPACE    	REVISION	UPDATED                                	STATUS  	CHART              	APP VERSION
ing-class-linux96	ingress-nginx	1       	2025-04-21 11:50:25.883175792 +0800 CST	deployed	ingress-nginx-4.2.5	1.3.1      
[root@master231 ingress-nginx]# 
[root@master231 ingress-nginx]# kubectl get ingressclass,deploy,svc,po -n ingress-nginx 
NAME                                   CONTROLLER             PARAMETERS   AGE
ingressclass.networking.k8s.io/nginx   k8s.io/ingress-nginx   <none>       3m46s

NAME                                                           TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/ing-class-linux96-ingress-nginx-controller             LoadBalancer   10.200.149.170   10.0.0.153    80:47228/TCP,443:40326/TCP   3m46s
service/ing-class-linux96-ingress-nginx-controller-admission   ClusterIP      10.200.223.163   <none>        443/TCP                      3m46s

NAME                                                   READY   STATUS    RESTARTS   AGE
pod/ing-class-linux96-ingress-nginx-controller-2ls5c   1/1     Running   0          3m46s
pod/ing-class-linux96-ingress-nginx-controller-bvgj2   1/1     Running   0          3m46s
[root@master231 ingress-nginx]# 


温馨提示:
	如果镜像拉取失败,可以使用我的仓库地址导入即可。
http://192.168.16.253/Resources/Kubernetes/Add-ons/ingress-nginx/dingzhiyan-ingress-nginx-v1.3.1.tar.gz

8.访问测试

对于外部而言,可以直接基于"10.0.0.153"地址进行访问。

	http://10.0.0.153

四、ingress的映射http案例

1.为什么要学习Ingress

NodePort在暴露服务时,会监听一个NodePort端口,且多个服务无法使用同一个端口的情况。

因此我们说Service可以理解为四层代理。说白了,就是基于IP:PORT的方式进行代理。

假设"v1.dingzhiyan.com"的服务需要监听80端口,而"v2.dingzhiyan.com"和"v3.dingzhiyan.com"同时也需要监听80端口,svc就很难实现。

这个时候,我们可以借助Ingress来实现此功能,可以将Ingress看做七层代理,底层依旧基于svc进行路由。

而Ingress在K8S是内置的资源,表示主机到svc的解析规则,但具体实现需要安装附加组件(对应的是IngressClass),比如ingress-nginx,traefik等。

IngressClass和Ingress的关系优点类似于: nginx和nginx.conf的关系。

2.准备环境

[root@master231 ingresses]# cat > 01-deploy-svc-xiuxian.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-xiuxian-v1
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: v1
  template:
    metadata:
      labels:
        apps: v1
    spec:
      containers:
      - name: c1
        image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
        ports:
        - containerPort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-xiuxian-v2
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: v2
  template:
    metadata:
      labels:
        apps: v2
    spec:
      containers:
      - name: c1
        image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
        ports:
        - containerPort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-xiuxian-v3
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: v3
  template:
    metadata:
      labels:
        apps: v3
    spec:
      containers:
      - name: c1
        image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v3
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: svc-xiuxian-v1
spec:
  type: ClusterIP
  selector:
    apps: v1
  ports:
  - port: 80

---

apiVersion: v1
kind: Service
metadata:
  name: svc-xiuxian-v2
spec:
  type: ClusterIP
  selector:
    apps: v2
  ports:
  - port: 80

---

apiVersion: v1
kind: Service
metadata:
  name: svc-xiuxian-v3
spec:
  type: ClusterIP
  selector:
    apps: v3
  ports:
  - port: 80
EOF

[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl apply -f 01-deploy-svc-xiuxian.yaml 
deployment.apps/deploy-xiuxian-v1 created
deployment.apps/deploy-xiuxian-v2 created
deployment.apps/deploy-xiuxian-v3 created
service/svc-xiuxian-v1 created
service/svc-xiuxian-v2 created
service/svc-xiuxian-v3 created
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl get pods  --show-labels
NAME                                 READY   STATUS    RESTARTS   AGE   LABELS
deploy-xiuxian-v1-6bc556784f-7x68g   1/1     Running   0          31s   apps=v1,pod-template-hash=6bc556784f
deploy-xiuxian-v1-6bc556784f-995hf   1/1     Running   0          31s   apps=v1,pod-template-hash=6bc556784f
deploy-xiuxian-v1-6bc556784f-ztwj5   1/1     Running   0          31s   apps=v1,pod-template-hash=6bc556784f
deploy-xiuxian-v2-64bb8c9785-4f525   1/1     Running   0          31s   apps=v2,pod-template-hash=64bb8c9785
deploy-xiuxian-v2-64bb8c9785-7f48v   1/1     Running   0          31s   apps=v2,pod-template-hash=64bb8c9785
deploy-xiuxian-v2-64bb8c9785-qr2zr   1/1     Running   0          31s   apps=v2,pod-template-hash=64bb8c9785
deploy-xiuxian-v3-698c86cf85-8jfbj   1/1     Running   0          31s   apps=v3,pod-template-hash=698c86cf85
deploy-xiuxian-v3-698c86cf85-gggwb   1/1     Running   0          31s   apps=v3,pod-template-hash=698c86cf85
deploy-xiuxian-v3-698c86cf85-j28rb   1/1     Running   0          31s   apps=v3,pod-template-hash=698c86cf85
[root@master231 ingresses]# 

3.编写Ingress规则

[root@master231 ingresses]# cat > 02-ingress-xiuxian.yaml <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-xiuxian
spec:
  ingressClassName: nginx
  rules:
    - host: v1.dingzhiyan.com
      http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: svc-xiuxian-v1
                port:
                  number: 80
            path: /
    - host: v2.dingzhiyan.com
      http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: svc-xiuxian-v2
                port:
                  number: 80
            path: /
    - host: v3.dingzhiyan.com
      http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: svc-xiuxian-v3
                port:
                  number: 80
            path: /
EOF

4.如果出现报错需要解决(可跳过,前提是你没有出错的情况)

4.1 修改配置文件

[root@master231 ingress-nginx]# kubectl  apply -f 02-ingress-xiuxian.yaml 
Error from server (InternalError): error when creating "02-ingress-xiuxian.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ing-class-linux96-ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": x509: certificate is not valid for any names, but wanted to match ing-class-linux96-ingress-nginx-controller-admission.ingress-nginx.svc
[root@master231 ingress-nginx]# 
[root@master231 ingress-nginx]# vim ingress-nginx/values.yaml 
...
589   admissionWebhooks:
...
596     enabled: false   # 将此字段设置为false


 helm upgrade --install ing-class-linux96 ingress-nginx -n ingress-nginx --create-namespace

4.2 重新安装Ingress-nginx使得配置生效

[root@master231 ingress-nginx]# helm  -n ingress-nginx uninstall ing-class-linux96 
release "ing-class-linux96" uninstalled
[root@master231 ingress-nginx]# 
[root@master231 ingress-nginx]#  helm upgrade --install ing-class-linux96 ingress-nginx -n ingress-nginx --create-namespace

4.3 验证pod是否就绪

[root@master231 ingress-nginx]# kubectl get ingressclass,svc,po -o wide -n ingress-nginx 
NAME                                   CONTROLLER             PARAMETERS   AGE
ingressclass.networking.k8s.io/nginx   k8s.io/ingress-nginx   <none>       71s

NAME                                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
service/ing-class-linux96-ingress-nginx-controller   LoadBalancer   10.200.182.87   10.0.0.153    80:24311/TCP,443:42523/TCP   71s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ing-class-linux96,app.kubernetes.io/name=ingress-nginx

NAME                                                   READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
pod/ing-class-linux96-ingress-nginx-controller-cpc26   1/1     Running   0          71s   10.0.0.233   worker233   <none>           <none>
pod/ing-class-linux96-ingress-nginx-controller-pxplf   1/1     Running   0          71s   10.0.0.232   worker232   <none>           <none>
[root@master231 ingress-nginx]# 

5.创建Ingress规则

[root@master231 ingresses]# kubectl apply -f 02-ingress-xiuxian.yaml 
ingress.networking.k8s.io/ingress-xiuxian created
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl get ingress
NAME              CLASS   HOSTS                                                ADDRESS   PORTS   AGE
ingress-xiuxian   nginx   v1.dingzhiyan.com,v2.dingzhiyan.com,v3.dingzhiyan.com             80      6s
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl describe ingress ingress-xiuxian 
Name:             ingress-xiuxian
Labels:           <none>
Namespace:        default
Address:          10.0.0.151
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host              Path  Backends
  ----              ----  --------
  v1.dingzhiyan.com  
                    /   svc-xiuxian-v1:80 (10.100.1.37:80,10.100.1.40:80,10.100.2.109:80)
  v2.dingzhiyan.com  
                    /   svc-xiuxian-v2:80 (10.100.1.38:80,10.100.1.41:80,10.100.2.110:80)
  v3.dingzhiyan.com  
                    /   svc-xiuxian-v3:80 (10.100.1.39:80,10.100.1.42:80,10.100.2.111:80)
Annotations:        <none>
Events:
  Type    Reason  Age               From                      Message
  ----    ------  ----              ----                      -------
  Normal  Sync    0s (x2 over 19s)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    0s (x2 over 19s)  nginx-ingress-controller  Scheduled for sync
[root@master231 ingresses]# 
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl get pods -o wide 
NAME                                 READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
deploy-xiuxian-v1-6bc556784f-7x68g   1/1     Running   0          3m43s   10.100.2.109   worker233   <none>           <none>
deploy-xiuxian-v1-6bc556784f-995hf   1/1     Running   0          3m43s   10.100.1.37    worker232   <none>           <none>
deploy-xiuxian-v1-6bc556784f-ztwj5   1/1     Running   0          3m43s   10.100.1.40    worker232   <none>           <none>
deploy-xiuxian-v2-64bb8c9785-4f525   1/1     Running   0          3m43s   10.100.1.38    worker232   <none>           <none>
deploy-xiuxian-v2-64bb8c9785-7f48v   1/1     Running   0          3m43s   10.100.2.110   worker233   <none>           <none>
deploy-xiuxian-v2-64bb8c9785-qr2zr   1/1     Running   0          3m43s   10.100.1.41    worker232   <none>           <none>
deploy-xiuxian-v3-698c86cf85-8jfbj   1/1     Running   0          3m43s   10.100.2.111   worker233   <none>           <none>
deploy-xiuxian-v3-698c86cf85-gggwb   1/1     Running   0          3m43s   10.100.1.42    worker232   <none>           <none>
deploy-xiuxian-v3-698c86cf85-j28rb   1/1     Running   0          3m43s   10.100.1.39    worker232   <none>           <none>
[root@master231 ingresses]# 

6.windows添加解析记录

10.0.0.232 v1.dingzhiyan.com v2.dingzhiyan.com   
10.0.0.233 v3.dingzhiyan.com 
	
或者:(二选一)
	10.0.0.153  v1.dingzhiyan.com v2.dingzhiyan.com v3.dingzhiyan.com 

7.访问Ingress-class服务

http://v1.dingzhiyan.com/
http://v2.dingzhiyan.com/
http://v3.dingzhiyan.com/

8.Ingress和Ingress class底层原理验证

[root@master231 ingresses]# kubectl get pods -o wide -n ingress-nginx 
NAME                                              READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
my-ingress-class-ingress-nginx-controller-6bnkr   1/1     Running   0          53m   10.0.0.233   worker233   <none>           <none>
my-ingress-class-ingress-nginx-controller-gqg7g   1/1     Running   0          53m   10.0.0.232   worker232   <none>           <none>
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl -it -n ingress-nginx exec my-ingress-class-ingress-nginx-controller-6bnkr -- bash
bash-5.1$ grep dingzhiyan.com /etc/nginx/nginx.conf
	## start server v1.dingzhiyan.com
		server_name v1.dingzhiyan.com ;
	## end server v1.dingzhiyan.com
	## start server v2.dingzhiyan.com
		server_name v2.dingzhiyan.com ;
	## end server v2.dingzhiyan.com
	## start server v3.dingzhiyan.com
		server_name v3.dingzhiyan.com ;
	## end server v3.dingzhiyan.com
bash-5.1$ 
exit
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl get ing
NAME              CLASS   HOSTS                                                ADDRESS      PORTS   AGE
ingress-xiuxian   nginx   v1.dingzhiyan.com,v2.dingzhiyan.com,v3.dingzhiyan.com   10.0.0.151   80      5m45s
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl delete -f 02-ingress-xiuxian.yaml 
ingress.networking.k8s.io "ingress-xiuxian" deleted
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl get ing
No resources found in default namespace.
[root@master231 ingresses]# 
[root@master231 ingresses]# 
[root@master231 ingresses]# kubectl -it -n ingress-nginx exec my-ingress-class-ingress-nginx-controller-6bnkr -- bash
bash-5.1$ 
bash-5.1$ grep dingzhiyan.com /etc/nginx/nginx.conf
bash-5.1$ 

五、ingress的映射https案例

1.生成证书文件(如果有证书跳过此步骤)

[root@master231 ingress-nginx]# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=www.yinzhengjie.com"
[root@master231 ingress-nginx]# ll tls.*
-rw-r--r-- 1 root root 1139 Apr 21 14:35 tls.crt
-rw------- 1 root root 1704 Apr 21 14:35 tls.key
[root@master231 ingress-nginx]#

2.将证书文件以secrets形式存储

[root@master231 ingress-nginx]# kubectl create secret tls ca-secret --cert=tls.crt --key=tls.key 
secret/ca-secret created
[root@master231 ingress-nginx]# 
[root@master231 ingress-nginx]# kubectl get secret/ca-secret
NAME        TYPE                DATA   AGE
ca-secret   kubernetes.io/tls   2      6s
[root@master231 ingress-nginx]# 

3.部署测试服务

[root@master231 02-casedemo-https]# cat > deploy-apple.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-apple
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: apple
  template:
    metadata:
      labels:
        apps: apple
    spec:
      containers:
      - name: apple
        image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:apple
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: svc-apple
spec:
  selector:
    apps: apple
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
EOF
[root@master231 02-casedemo-https]# 
[root@master231 02-casedemo-https]# kubectl apply -f  deploy-apple.yaml 
deployment.apps/deployment-apple created
service/svc-apple created
[root@master231 02-casedemo-https]# 
[root@master231 02-casedemo-https]# kubectl get pods -l apps=apple -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
deployment-apple-5496cd9b6c-2psch   1/1     Running   0          89s   10.100.1.43    worker232   <none>           <none>
deployment-apple-5496cd9b6c-7rf6c   1/1     Running   0          89s   10.100.1.44    worker232   <none>           <none>
deployment-apple-5496cd9b6c-cglvj   1/1     Running   0          89s   10.100.2.112   worker233   <none>           <none>
[root@master231 02-casedemo-https]# 

4.配置Ingress添加TLS证书

[root@master231 02-casedemo-https]# cat ingress-tls.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-tls-https
  # 如果指定了"ingressClassName"参数,就不需要在这里重复声明啦。
  # 如果你的K8S 1.22- 版本,则使用注解的方式进行传参即可。
  #annotations:
  #  kubernetes.io/ingress.class: "nginx"
spec:
  # 指定Ingress Class,要求你的K8S 1.22+
  ingressClassName: nginx
  rules:
  - host: www.yinzhengjie.com
    http:
      paths:
      - backend:
          service:
            name: svc-apple
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  # 配置https证书
  tls:
  - hosts:
    - www.yinzhengjie.com
    secretName: ca-secret
[root@master231 02-casedemo-https]# 
[root@master231 02-casedemo-https]# kubectl apply -f ingress-tls.yaml
ingress.networking.k8s.io/ingress-tls-https created
[root@master231 02-casedemo-https]# 
[root@master231 02-casedemo-https]# kubectl get ingress ingress-tls-https 
NAME                CLASS   HOSTS                 ADDRESS   PORTS     AGE
ingress-tls-https   nginx   www.yinzhengjie.com             80, 443   5s
[root@master231 02-casedemo-https]# 
[root@master231 02-casedemo-https]# kubectl describe ingress ingress-tls-https 
Name:             ingress-tls-https
Labels:           <none>
Namespace:        default
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
  ca-secret terminates www.yinzhengjie.com
Rules:
  Host                 Path  Backends
  ----                 ----  --------
  www.yinzhengjie.com  
                       /   svc-apple:80 (10.100.1.43:80,10.100.1.44:80,10.100.2.112:80)
Annotations:           <none>
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  Sync    9s    nginx-ingress-controller  Scheduled for sync
  Normal  Sync    9s    nginx-ingress-controller  Scheduled for sync
[root@master231 02-casedemo-https]# 

5.windows添加解析

10.0.0.233 www.yinzhengjie.com

6.访问测试

https://www.yinzhengjie.com/
温馨提示:
	如果google浏览器自建证书不认可,可以用鼠标在空白处单击左键,而后输入:"thisisunsafe",就会自动跳转。
	
	当然,如果不想打这个代码,可以使用火狐浏览器打开即可。
posted @ 2025-05-21 13:23  丁志岩  阅读(36)  评论(0)    收藏  举报