k8s部署IngressController

ingress工作原理

参考: https://www.toutiao.com/a6939101056643203587/?log_from=8fbeb3d56fe36_1646033531592
在这里插入图片描述


k8s部署IngressController


下载ingress-nginx资源清单

项目地址: https://kubernetes.github.io/ingress-nginx/deploy/#quick-start

如果不是云主机,请下载裸金属配置: https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters

# 下载ingress-nginx资源清单
wget https://ghproxy.com/https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/baremetal/deploy.yaml

编辑ingress-nginx资源清单(裸金属配置不用修改)

!!!注意: nodePort大小写敏感

services中添加httphttptNodePort,默认是随机端口
type修改为NodePort
http的端口修改为30080
https的端口修改为30443
在这里插入图片描述


修改ingress默认端口

参考: https://blog.csdn.net/catoop/article/details/121447317

如果ingress已经部署好,就使用下面的方法进行修改

# 编辑nginx-ingress-controller
kubectl edit daemonset nginx-ingress-controller -n ingress-nginx

编辑nginx-ingress-controller的yaml资源清单

    containers:
      - args:
        - /nginx-ingress-controller
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
        - --configmap=$(POD_NAMESPACE)/nginx-configuration
        - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
        - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
        - --annotations-prefix=nginx.ingress.kubernetes.io
        # 增加以下两个参数参数(一个是http端口,一个是https端口)
        - --http-port=80
        - --https-port=443    

删除原来的nginx-ingress-controller这个 pod,k8s重建pod后端口会生效.


apply后查看ingress

# apply这个ingress资源清单
kubectl apply -f deploy.yaml

# 查看ingress
kubectl get ingress -A

# 查看ingress详情
kubectl desrice ingress ing名

修改ingress-nginx的网络模式为hostNetwork

开启hostNetwork后可以直接使用域名访问,不需要加端口,性能也更好.
控制器类型必需使用DaemonSet,否则pod暴露的host端口会冲突

参考: https://blog.csdn.net/weixin_41535316/article/details/121873795

修改下载好的ingress-nginx资源清单文件中的网路配置为hostNetwork

# 将Deployment修改为DaemonSet
apiVersion: apps/v1
#kind: Deployment
kind: DaemonSet  #这里把Deployment改成DaemonSet
metadata:

# 在DaemonSet的下方的容器选择中添加一行
    spec:
      dnsPolicy: ClusterFirst
      hostNetwork: true  #这里加一句,开启hostNetwork
      containers:
        - name: controller
# 修改NodePort为ClusterIP(非必须)
# type: NodePort
  type: ClusterIP

在这里插入图片描述


pathType路径类型

路径类型官方文档

Exact:精确匹配 URL 路径,且区分大小写。

Prefix:基于以 / 分隔的 URL 路径前缀匹配。匹配区分大小写,并且对路径中的元素逐个完成。 路径元素指的是由 / 分隔符分隔的路径中的标签列表。 如果每个 p 都是请求路径 p 的元素前缀,则请求与路径 p 匹配。

ingress如果要访问路径,在path 要填写//路径,注意是/
如果访问的是根路径1/就好


ingress暴露的两种方式

  • NodePort
  • hostnetwork

在这里插入图片描述


k8s发布一个应用


创建deployment和services

创建deployment

# 创建一个deployment
kubectl create deployment edu --image=nginx

创建service

# 创建一个svc
kubectl expose deployment edu --port=80 --target-port=80

创建一个ingress

# 通过命令行创建yaml
kubectl create ingress edu --rule=web.edu.cn/=edu:80 --dry-run=client -o yaml > ing.yaml

ingress-yaml资源清单示例

!!!注意: k8s1.22及以上版本的ingress必须声明控制器

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: edu
  annotations:
  # 指定下ingress控制器,不然域名访问不了
    kubernetes.io/ingress.class: "nginx"
  
spec:
  rules:
  - host: web.edu.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: edu
            port:
              number: 80

通过命令行创建ingress(命令创建的域名无法访问,未解决)
访问/目录时要填写两个//

## 访问/目录时要填写两个//
kubectl create ingress edu --rule=web.edu.cn//=edu:80

apply这个ingress

# apply这个ingress
kubectl apply -f ing.yaml

# 查看ingress
kubectl get ingress

本地修改hosts绑定对应域名

!!!注意:<Ingress Controler Pod所在Node IP> 域名

# 查看Ingress Controler Pod所在node
kubectl get po -A -owide|grep ingress-nginx-controller

# # 查看Ingress Controler Pod所在node
kubectl get pods,svc -owide -n ingress-nginx

在这里插入图片描述


ingress配置规则https

参考: 将 HTTPS 负载平衡中的多个 SSL 证书与 Ingress 搭配使用

在这里插入图片描述


创建证书文件(自签名)

https://blog.csdn.net/omaidb/article/details/121188674

# 创建key
openssl genrsa -out qftest.com.tls.key 2048

# 创建crt
openssl req new -x509 -key tls.key -out tls.crt -subj
/C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=myapp.tls-ingress.com

# 将key和crt文件合并成pem证书文件
#cat my_site.pem ca_chain.pem my_site.key > combined_cert.pem

# 将证书保存到Secret
kubectl create secret tls 证书名 --cert=tls.crt --key=tls.key

创建https的ingress规则

# 将证书保存到Secret
kubectl create secret tls 证书名 --cert=tls.crt --key=tls.key

# 创建https的ingress规则
## 访问/目录时要填写两个//
kubectl create ingress edu --rule=web.edu.cn//=edu:80,tls=证书名secret --dry-run=client -o yaml > https-ing.yaml

ingress-yaml资源清单示例

!!!注意: k8s1.22及以上版本的ingress必须声明控制器

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: edu
  annotations:
    # 指定下ingress控制器,不然域名访问不了
    kubernetes.io/ingress.class: "nginx"

spec:
  tls:
  - host: web.edu.cn
    secretName: 证书名 # 这里填写secret中对应的证书名
  rules:
    - host: web.edu.cn
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: edu
                port:
                  number: 443

部署backend应用

通常在 Ingress 控制器中会配置 defaultBackend(默认后端),以服务于任何不符合规约中 path 的请求.

参考:
k8s-doc配置默认后端

部署backend应用

查看ing详情时会提示: Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
这是没有部署默认backend应用.
在这里插入图片描述


创建ingress报错

参考: https://blog.csdn.net/qq_39218530/article/details/115372879
错误提示如下:
Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post https://ingress-nginx-controller-admission.kube-system.svc:443/networking/v1beta1/ingresses? timeout=10s: dial tcp 10.0.0.5:8443: connect: connection refused


解决办法

参考办法: https://stackoverflow.com/questions/61616203/nginx-ingress-controller-failed-calling-webhook

# 使用下面的命令查看 webhook
kubectl get validatingwebhookconfigurations
# 打印ingress-nginx-admission

# 删除ingress-nginx-admission
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission

# 再创建ingress就不报错了

ingress没有adress,域名访问404

参考: 解决 Kubernetes NGINX Ingress Controller v1.0.0-Yamasa of the World 的 404 错误问题

老版本的ingress可以域名访问,且有address,新版本的ingress访问404且没有adress

发生错误的版本: controller-v1.1.2


解决办法: 声明ingressClass(指定ingress控制器)

必须声明ingressClass(指定ingress控制器)

# 创建ingress时声明IngressClass就会有address,也不会404
  annotations:
    kubernetes.io/ingress.class: "nginx"

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
部署 k8s 中的 ingress-controller v1.1.0,可以按照以下步骤进行操作: 1. 首先,确保 Kubernetes 集群已经可用并且已经正确设置。 2. 下载 ingress-controller v1.1.0 的安装文件。可以通过访问官方仓库或者 GitHub 并找到相关的发布版本进行下载。 3. 解压并配置 ingress-controller。通常可以通过编辑 YAML 文件来配置 ingress-controller,在其中指定一些关键参数,如使用的 ingress 类型、负载均衡器类型等。 4. 部署 ingress-controller。通过使用 kubectl 命令行工具,执行 `kubectl apply -f <配置文件>` 来完成 ingress-controller部署。 5. 确认 ingress-controller 已经成功部署。可以使用 `kubectl get pods -n <命名空间>` 命令来确认 ingress-controller 的运行状态。 6. 配置 ingress 规则。根据实际需求,编辑定义 ingress 规则的 YAML 文件并部署Kubernetes 中。 7. 确认 ingress 规则已经生效。可以通过 `kubectl get ingress -n <命名空间>` 命令来查看已部署ingress 规则,并确认其状态为 "RUNNING"。 8. 测试 ingress-controller。通过访问 ingress 规则中指定的域名或路径来确认 ingress-controller 是否成功地将请求转发到相应的服务。 这些步骤可以帮助您在 Kubernetes部署 ingress-controller v1.1.0,并通过 ingress 规则进行请求转发。在部署过程中,记得根据实际需求进行必要的配置和调整,以确保 ingress-controller 能够正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值