Kubernetes进阶实战读书笔记:案例-使用ingress发布tomcat

一、准备名称空间

资源清单:

1
2
3
4
5
6
7
[root@master chapter6]# cat testing-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
  name: testing
  labels:
    env: testing

创建:

1
2
[root@master chapter6]# kubectl apply -f testing-namespace.yaml
namespace/testing created

确认资源的存在:

1
2
3
[root@master chapter6]# kubectl get ns testing
NAME STATUS AGE
testing Active 11s

二、部署tomcat实例

创建:

1
2
[root@master chapter6]# kubectl apply -f tomcat-deploy.yaml
deployment.apps/tomcat-deploy created

验证:

1
2
3
4
[root@master chapter6]# kubectl get pods -n testing -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-deploy-5c6746469-mwkp7 1/1 Running 0 5m24s 10.244.2.2 nodes2 <none> <none>
tomcat-deploy-5c6746469-sjswn 1/1 Running 0 5m24s 10.244.0.88 master <none> <none>

三、创建service资源

资源清单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@master chapter6]# cat tomcat-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
  namespace: testing
  labels:
    app: tomcat-svc
spec:
  selector:
    app: tomcat
  ports:
  - name: httpport
    port: 80
    targetPort: 8080
    protocol: TCP

创建:

1
2
[root@master chapter6]# kubectl apply -f tomcat-svc.yaml
service/tomcat-svc created

确认:

1
2
3
[root@master chapter6]# kubectl get svc tomcat-svc -n testing
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tomcat-svc ClusterIP 10.105.240.206 <none> 80/TCP 41s

四、创建ingress资源

资源清单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@master chapter6]# cat tomcat-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat
  namespace: testing
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: tomcat.ikubernetes.io
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat-svc
          servicePort: 80

创建运行:

1
2
[root@master chapter6]# kubectl apply -f tomcat-ingress.yaml
ingress.extensions/tomcat created

验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@master chapter6]# kubectl describe ingress -n testing
Name:             tomcat
Namespace:        testing
Address:          192.168.118.18
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                   Path  Backends
  ----                   ----  --------
  tomcat.ikubernetes.io 
                            tomcat-svc:80 (10.244.0.88:8080,10.244.2.2:8080)
Annotations:             kubernetes.io/ingress.class: nginx
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  11m   nginx-ingress-controller  Ingress testing/tomcat
  Normal  UPDATE  11m   nginx-ingress-controller  Ingress testing/tomcat
 
[root@master chapter6]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.96.209.11   <none>        80:30724/TCP,443:32624/TCP   30m
ingress-nginx-controller-admission   ClusterIP   10.96.105.3    <none>        443/TCP                      30m
nginx-ingress-controller             NodePort    10.99.99.99    <none>        80:30080/TCP,443:30443/TCP   13m

五、进入容器查看nginx配置文件验证刚才的配置

进入容器

1
2
3
4
5
6
7
[root@master chapter6]# kubectl exec -n ingress-nginx -it ingress-nginx-controller-5d9498494d-97blq -- /bin/sh
/etc/nginx $ ls
fastcgi.conf geoip mime.types nginx.conf scgi_params uwsgi_params.default
fastcgi.conf.default koi-utf mime.types.default nginx.conf.default scgi_params.default win-utf
fastcgi_params koi-win modsecurity opentracing.json template
fastcgi_params.default lua modules owasp-modsecurity-crs uwsgi_params
/etc/nginx $

nginx配置文件

重要看下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
        server_name tomcat.ikubernetes.io ;
         
        listen 80  ;
        listen 443  ssl http2 ;
         
        set $proxy_upstream_name "-";
         
        ssl_certificate_by_lua_block {
            certificate.call()
        }
         
        location / {
             
            set $namespace      "testing";
            set $ingress_name   "tomcat";
            set $service_name   "tomcat-svc";
            set $service_port   "80";
            set $location_path  "/";
             
            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = true,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

六、配置TLS lngress资源

如果有基于HTTPS通信需求、那么它应该由外部的负载均衡器予以实现、并在SSL会话卸载后将访问请求转发到ingress控制器接受客户端请求的需求、又期望他们能够提供HTTPS服务时、就应该配置TLS类型ingress资源

将此服务公开发布到互联网时、HTTPS服务用到的证书应由公信CA签署并颁发、用户遵循其相应流程准备好相关的数字证书即可

如果出于测试或内部使用之目的、那么也可以选择自制私有证书

自制私有证书

1
2
3
4
5
6
7
8
9
10
11
12
[root@master tomcat]# openssl genrsa -out tls.key 2048
Generating RSA private key, 2048 bit long modulus
..........................+++
...................+++
e is 65537 (0x10001)
 
[root@master tomcat]# openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Xian/L=Xian/O=DevOps/CN=tomcat.liunux.io -days 3650
 
[root@master tomcat]# ll
total 12
-rw-r--r-- 1 root root 1277 Jul 30 15:00 tls.crt
-rw-r--r-- 1 root root 1675 Jul 30 14:56 tls.key

在ingress控制器上配置HTTPS主机时、不能直接使用私钥和证书文件

创建一个TLS类型名为:tomcat-ingress-secret的secret资源

1
2
[root@master tomcat]# kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key -n testing
secret/tomcat-ingress-secret created

确认secret资源tomcat-ingress-secret创建成功完成

1
2
3
[root@master tomcat]# kubectl get secrets tomcat-ingress-secret -n testing
NAME TYPE DATA AGE
tomcat-ingress-secret kubernetes.io/tls 2 2m11s

定义TLS类型ingress资源的配置清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@master tomcat]# cp ../tomcat-ingress-tls.yaml .
[root@master tomcat]# cat tomcat-ingress-tls.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress-tls
  namespace: testing
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
  - hosts:
    - tomcat.ikubernetes.io
    secretName: tomcat-ingress-secret
  rules:
  - host: tomcat.ikubernetes.io
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-svc
          servicePort: 80

创建运行

1
kubectl apply -f tomcat-ingress-tls.yaml

  

 

posted @   活的潇洒80  阅读(2416)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2017-07-30 函数和常用模块【day04】:内置函数分类总结(十一)
点击右上角即可分享
微信分享提示