文章链接

ingress-nginx

ingress 官方网站

ingress 仓库地址

ingress-nginx v1.0 最新版本 v1.0

适用于 Kubernetes 版本 v1.19+ (包括 v1.19

Kubernetes-v1.22+ 需要使用 ingress-nginx>=1.0,因为 networking.k8s.io/v1beta 已经移除

直接部署 ingress-nginx

直接部署比较简单,直接拉去 girhub 的文件就可以了,如果遇到长时间无响应,可以终止任务从新拉取。

拉取镜像部分,可以修改为一下的镜像地址

  1. wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml
  2. sed -i 's@k8s.gcr.io/ingress-nginx/controller:v1.0.0\(.*\)@willdockerhub/ingress-nginx-controller:v1.0.0@' deploy.yaml
  3. sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0\(.*\)$@hzde0128/kube-webhook-certgen:v1.0@' deploy.yaml
  4. kubectl apply -f ingress-nginx.yaml

检查安装

Completed 状态的是正常的,可以忽略。

  1. [root@master ~]# kubectl get po -n ingress-nginx
  2. NAME READY STATUS RESTARTS AGE
  3. ingress-nginx-admission-create-pm6sw 0/1 Completed 0 22m
  4. ingress-nginx-admission-patch-m8w94 0/1 Completed 0 22m
  5. ingress-nginx-controller-7d4df87d89-272ft 1/1 Running 0 22m
  6. [root@master ~]# kubectl get svc -n ingress-nginx
  7. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  8. ingress-nginx-controller NodePort 10.96.88.139 <none> 80:30497/TCP,443:32581/TCP 22m
  9. ingress-nginx-controller-admission ClusterIP 10.96.193.26 <none> 443/TCP 22m

创建应用yaml

  1. vim tomcat.yaml
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: tomcat-deployment
  5. labels:
  6. app: tomcat
  7. spec:
  8. replicas: 2
  9. selector:
  10. matchLabels:
  11. app: tomcat
  12. minReadySeconds: 1
  13. progressDeadlineSeconds: 60
  14. revisionHistoryLimit: 2
  15. strategy:
  16. type: RollingUpdate
  17. rollingUpdate:
  18. maxSurge: 1
  19. maxUnavailable: 1
  20. template:
  21. metadata:
  22. labels:
  23. app: tomcat
  24. spec:
  25. containers:
  26. - name: tomcat
  27. image: wenlongxue/tomcat:tomcat-demo-62-8fe6052
  28. imagePullPolicy: Always
  29. ports:
  30. - containerPort: 8080
  31. resources:
  32. requests:
  33. memory: "2Gi"
  34. cpu: "80m"
  35. limits:
  36. memory: "2Gi"
  37. cpu: "80m"
  38. readinessProbe:
  39. httpGet:
  40. path: /
  41. port: 8080
  42. initialDelaySeconds: 180
  43. periodSeconds: 5
  44. timeoutSeconds: 3
  45. successThreshold: 1
  46. failureThreshold: 30
  47. ---
  48. apiVersion: v1
  49. kind: Service
  50. metadata:
  51. name: tomcat-service
  52. labels:
  53. app: tomcat
  54. spec:
  55. selector:
  56. app: tomcat
  57. ports:
  58. - name: tomcat-port
  59. protocol: TCP
  60. port: 8080
  61. targetPort: 8080
  62. type: ClusterIP

部署 tomcat 应用

  1. kubectl apply -f tomcat.yaml

创建 ingress yaml

  1. vim tomcat-ingress.yaml
  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: tomcat
  5. annotations:
  6. kubernetes.io/ingress.class: "nginx"
  7. spec:
  8. rules:
  9. - host: tomcat.cnsre.cn
  10. http:
  11. paths:
  12. - path: "/"
  13. pathType: Prefix
  14. backend:
  15. service:
  16. name: tomcat-service
  17. port:
  18. number: 8080

部署 tomcat ingress yaml

  1. kubectl apply -f tomcat-ingress.yaml

查看 ingress 对应节点的端口

  1. kubectl get svc -n ingress-nginx
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. ingress-nginx-controller NodePort 10.96.88.139 <none> 80:30497/TCP,443:32581/TCP 54m
  4. ingress-nginx-controller-admission ClusterIP 10.96.193.26 <none> 443/TCP 54m

添加 hosts

hosts 文件最后追加 ingress 节点的 IP 地址

  1. 54.xxx.xxx.xxx tomcat.cnsre.cn

然后在浏览器中访问 tomcat.cnsre.cn:30497

使用 hostNetwork 的方式部署 ingress-nginx

每次部署 ingres-nginx 都随机一个 nodePort ,而使用 ingres-nginx 访问的时候也要以 域名:端口 的形式去访问如何直接使用域名去访问呢?下面介绍另外一种安装方式。

  1. wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml
  2. sed -i 's@k8s.gcr.io/ingress-nginx/controller:v1.0.0\(.*\)@willdockerhub/ingress-nginx-controller:v1.0.0@' deploy.yaml
  3. sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0\(.*\)$@hzde0128/kube-webhook-certgen:v1.0@' deploy.yaml

优化 ingress-nginx

使用 hostNetwork

默认 ingress-nginx 随机提供 nodeport 端口,开启 hostNetwork 启用80、443端口。

修改 Deployment 下面的 spec

参数如下:

  1. ...
  2. spec:
  3. hostNetwork: true # 新增
  4. dnsPolicy: ClusterFirst
  5. containers:
  6. - name: controller
  7. image: willdockerhub/ingress-nginx-controller:v1.0.0 # 更换镜像地址
  8. imagePullPolicy: IfNotPresent
  9. lifecycle:
  10. ...

修改负载均衡问题

kind: Deployment 改为 kind: DaemonSet 模式,这样每台 node 上都有 ingress-nginx-controller pod 副本。

参数如下:

  1. ...
  2. # Source: ingress-nginx/templates/controller-deployment.yaml
  3. apiVersion: apps/v1
  4. #kind: Deployment # 注释
  5. kind: DaemonSet # 新增
  6. metadata:
  7. labels:
  8. helm.sh/chart: ingress-nginx-4.0.1
  9. ...

修改 ingressClass 问题

如果不关心 ingressClass 或者很多没有 ingressClass 配置的 ingress 对象,

添加参数 ingress-controller --watch-ingress-without-class=true

  1. ...
  2. args:
  3. - /nginx-ingress-controller
  4. - --publish-service=$(POD_NAMESPACE)/ingress-nginx-dev-v1-test-controller
  5. - --election-id=ingress-controller-leader
  6. - --controller-class=k8s.io/ingress-nginx
  7. - --configmap=$(POD_NAMESPACE)/ingress-nginx-dev-v1-test-controller
  8. - --validating-webhook=:8443
  9. - --validating-webhook-certificate=/usr/local/certificates/cert
  10. - --validating-webhook-key=/usr/local/certificates/key
  11. - --watch-ingress-without-class=true # 新增
  12. ...

部署检查 ingress

  1. # 部署
  2. kubectl apply -f ingress-nginx.yaml
  3. # 检查 pod
  4. [root@master ~]# kubectl get pods -n ingress-nginx -o wide
  5. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  6. ingress-nginx-admission-create-gmnmp 0/1 Completed 0 84m 10.100.219.105 master <none> <none>
  7. ingress-nginx-admission-patch-f5sgc 0/1 Completed 0 84m 10.100.219.106 master <none> <none>
  8. ingress-nginx-controller-b62w7 1/1 Running 0 84m 10.0.10.51 master <none> <none>
  9. ingress-nginx-controller-lsn7h 1/1 Running 0 84m 10.0.20.222 node1 <none> <none>
  10. # 检查端口
  11. [root@master ~]# netstat -pntl |grep 443
  12. tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 31248/nginx: master
  13. [root@master ~]# netstat -pntl |grep 80
  14. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 31248/nginx: master

创建应用yaml

  1. vim tomcat.yaml
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: tomcat-deployment
  5. labels:
  6. app: tomcat
  7. spec:
  8. replicas: 2
  9. selector:
  10. matchLabels:
  11. app: tomcat
  12. minReadySeconds: 1
  13. progressDeadlineSeconds: 60
  14. revisionHistoryLimit: 2
  15. strategy:
  16. type: RollingUpdate
  17. rollingUpdate:
  18. maxSurge: 1
  19. maxUnavailable: 1
  20. template:
  21. metadata:
  22. labels:
  23. app: tomcat
  24. spec:
  25. containers:
  26. - name: tomcat
  27. image: wenlongxue/tomcat:tomcat-demo-62-8fe6052
  28. imagePullPolicy: Always
  29. ports:
  30. - containerPort: 8080
  31. resources:
  32. requests:
  33. memory: "2Gi"
  34. cpu: "80m"
  35. limits:
  36. memory: "2Gi"
  37. cpu: "80m"
  38. readinessProbe:
  39. httpGet:
  40. path: /
  41. port: 8080
  42. initialDelaySeconds: 180
  43. periodSeconds: 5
  44. timeoutSeconds: 3
  45. successThreshold: 1
  46. failureThreshold: 30
  47. ---
  48. apiVersion: v1
  49. kind: Service
  50. metadata:
  51. name: tomcat-service
  52. labels:
  53. app: tomcat
  54. spec:
  55. selector:
  56. app: tomcat
  57. ports:
  58. - name: tomcat-port
  59. protocol: TCP
  60. port: 8080
  61. targetPort: 8080
  62. type: ClusterIP

部署 tomcat 应用

  1. kubectl apply -f tomcat.yaml

创建 ingress yaml

  1. vim tomcat-ingress.yaml
  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: tomcat
  5. annotations:
  6. kubernetes.io/ingress.class: "nginx"
  7. spec:
  8. rules:
  9. - host: tomcat.cnsre.cn
  10. http:
  11. paths:
  12. - path: "/"
  13. pathType: Prefix
  14. backend:
  15. service:
  16. name: tomcat-service
  17. port:
  18. number: 8080

部署 tomcat ingress yaml

  1. kubectl apply -f tomcat-ingress.yaml

添加 hosts

hosts 文件最后追加 ingress 节点的 IP 地址

  1. 54.xxx.xxx.xxx tomcat.cnsre.cn

然后在浏览器中访问 tomcat.cnsre.cn:30497

给 ingress-nginx 配置 HTTPS 访问

创建自签证书文件

  1. openssl req -x509 -nodes -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginx/O=nginx"

创建后会生成两个文件

  1. ll tls.*
  2. -rw-r--r--. 1 root root 1127 9 2 13:04 tls.crt
  3. -rw-r--r--. 1 root root 1708 9 2 13:04 tls.key

创建 secret

  1. kubectl create secret tls tls-secret --key tls.key --cert tls.crt

修改 tomcat-ingress yaml

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: tomcat
  5. annotations:
  6. kubernetes.io/ingress.class: "nginx"
  7. spec:
  8. tls: # 新增
  9. - hosts: # 新增
  10. - tomcat.cnsre.cn # 新增
  11. secretName: tls-secret # 新增
  12. rules:
  13. - host: tomcat.cnsre.cn
  14. http:
  15. paths:
  16. - path: "/"
  17. pathType: Prefix
  18. backend:
  19. service:
  20. name: tomcat-service
  21. port:
  22. number: 8080

修改完重新部署下

  1. kubectl apply -f tomcat-ingress.yaml

验证证书

访问tomcat.cnsre.cn



文章链接

kubernetes 安装 ingress controller的更多相关文章

  1. kubernetes nginx ingress controller部署

    Kubernetes nginx ingress controller部署 1.下载kubernetes nginx的yaml文件 Wget https://raw.githubusercontent ...

  2. 在Kuboard上安装 Ingress Controller

    快速安装 # 只在 master 节点执行 kubectl apply -f https://kuboard.cn/install-script/v1.18.x/nginx-ingress.yaml ...

  3. kubernetes 的ingress controller 的nginx configuration配置参数

    下列列举一些参数其中常用的大家可根据实际情况自行添加(影响全局) kubectl edit cm nginx-configuration -n ingress-nginx 配置文件cm的定义: htt ...

  4. k8s上安装安装 Ingress Controller &卸载

    在 master 节点上执行 nginx-ingress.yaml文件内容 # 如果打算用于生产环境,请参考 https://github.com/nginxinc/kubernetes-ingres ...

  5. kubernetes nginx ingress 使用记录

    前言 ingress是一种可以暴露k8s集群内部service的方式,用户编辑配置文件定义一个ingress资源即可实现外部网络访问内网service. ingress controller是来管理所 ...

  6. Kubernetes Ingress Controller的使用及高可用落地

    Kubernetes Ingress Controller的使用及高可用落地 看懂本文要具备一下知识点: Service实现原理和会应用 知道反向代理原理,了解nginx和apache的vhost概念 ...

  7. Kubernetes 服务入口管理与 Nginx Ingress Controller

    Kubernetes 具有强大的副本,动态扩容等特性,每一次 Pod 的变化 IP 地址都会发生变化,所以 Kubernetes 引进了 Service 的概念.Kubernetes 中使用 Serv ...

  8. Kubernetes学习之路(十五)之Ingress和Ingress Controller

    目录 一.什么是Ingress? 1.Pod 漂移问题 2.端口管理问题 3.域名分配及动态更新问题 二.如何创建Ingress资源 三.Ingress资源类型 1.单Service资源型Ingres ...

  9. Kubernetes 学习11 kubernetes ingress及ingress controller

    一.上集回顾 1.Service 3种模型:userspace,iptables,ipvs 2.Service类型 ClusterIP,NodePort NodePort:client -> N ...

随机推荐

  1. 深入刨析tomcat 之---第9篇 how tomcat works 第9章,Session的实现 关于request.setContext(context)

    writedby 张艳涛,在学第9章session的时候,做了个实验在给的demo代码中添加了 package com.zyt.tomcat.ex09.core; public class Simpl ...

  2. JS 之循环 应用案例1

    应用场景:将el-select下拉框的lab值,显示在下面的详情text框,见下图 用到了 el-select 传值,js循环判断options.code是否等于传进来的值,等于就break; tex ...

  3. intouch制作历史报警查询(时间查询,筛选关键字)

    在项目中,intouch制作历史报警查询已属于标配功能,如何做出按时间以及关键字来进行综合查询,提高历史报警查询效率仍然是一个值得研究的问题,接下来参考网上文章自己总结下如何制作. 1.DTPicke ...

  4. 使用C#winform编写渗透测试工具--端口扫描

    使用C#winform编写渗透测试工具--端口扫描器 主要介绍使用C#winform编写渗透测试工具--端口扫描器,端口扫描器则是一种检测服务器或者主机虚拟端口是开启或关闭的工具.由于连接到局域网或互 ...

  5. Spring Cloud分区发布实践(1) 环境准备

    最近研究了一下Spring Cloud里面的灰度发布, 看到各种各样的使用方式, 真是纷繁复杂, 眼花缭乱, 不同的场景需要不同的解决思路. 那我们也来实践一下最简单的场景: 区域划分: 服务分为be ...

  6. 高效JAVA之用静态工厂方法代替构造器

    程序员这行干的久了,总会染上一些恶习,我就染上一个让人深恶痛绝,自己却津津乐道的习惯,还不想改的那种,它可以叫做强迫症,也可以叫做洁癖.那就是我不允许我的IDEA出现一点点警告,什么黄色背景,绿色波浪 ...

  7. Aging Cell两篇连发 | 华中科技大学王建枝团队运用蛋白质组学技术发现具有AD早期诊断价值的血小板生物标志物

    阿尔茨海默症 (Alzheimer 's disease,AD) 是一种原发性的中枢神经系统退行性疾病.AD的主要临床症状是缓慢的认知功能减退,包括记忆.逻辑推理能力和语言功能的进行性丟失,最后发展为 ...

  8. Upload-labs 文件上传靶场通关攻略(下)

    Upload-Labs靶场攻略(下) Pass-11 GET型传参,上传目录可设置,考虑00截断,在/upload/后添加1.php%00,即可上传 Pass-12 POST型传参,上传目录可设置,P ...

  9. 【UGUI源码分析】Unity遮罩之Mask详细解读

    遮罩,顾名思义是一种可以掩盖其它元素的控件.常用于修改其它元素的外观,或限制元素的形状.比如ScrollView或者圆头像效果都有用到遮罩功能.本系列文章希望通过阅读UGUI源码的方式,来探究遮罩的实 ...

  10. 2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载

    笔记作者:来自于阿里P8级大神: Mark 笔记特点:条理清晰,理论+实战+源码,含图像化表示更加易懂. 内容概要:Android 相关,性能优化,Java 相关,Kotlin 相关,网络相关,插件化 ...