k8s ingress-controller

在 Kubernetes 的世界中,Ingress 是一种神奇的存在,它像一个智能门卫,控制着外部流量如何访问集群内的微服务。Ingress 不仅简化了服务的暴露过程,还提供了负载均衡、SSL 证书管理等实用功能。本文将带你快速了解 Kubernetes Ingress 的基本概念和配置方法,让你的服务部署更加得心应手

Ingress 专注于处理外部流量,提供更丰富的路由和安全特性

现在我们来安装配置一下ingress-controller

k8s-master

192.168.8.128
k8s-node1 192.168.8.129
k8s-node2 192.168.8.130
harbor 192.168.8.99

一: 准备ingress controller和kube-webhook-certgen镜像

注意: 大家如果没有搭建harbor的话就直接在node节点导入镜像就可以了,然后在yaml文件中就直接写导入后的镜像的名字即可

containerd 容器运行时导入镜像命令 : ctr -n k8s.io  image import   镜像

docker 容器运行时导入镜像命名: docker  load  -i  镜像

从阿里云的镜像仓库上面拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.0  #webhook镜像

在 Kubernetes Ingress 的使用场景中,尤其是使用 Ingress-Nginx 作为 Ingress Controller 时,kube-webhook-certgen 工具被用来创建和更新用于 TLS 认证的证书。这些证书被用于确保 Webhook 与 Kubernetes API 服务器之间的通信是安全的。

扫描二维码关注公众号,回复: 17411692 查看本文章

给拉下来的镜像打标签推送到harbor上面

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0 192.168.8.99/k8s-ingress/nginxingress-controller:v1.1.0      #打标签

docker tag  registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.0 192.168.8.99/k8s-ingress/kube-webhook-certgen:v1.1.0 

docker push 192.168.8.99/k8s-ingress/nginxingress-controller:v1.1.0   

docker push 192.168.8.99/k8s-ingress/kube-webhook-certgen:v1.1.1

#推送到harbor中的k8s-ingress项目中

登录harbor查看

可以看到确实已经有了

二: 创建ingress controller

拉取v1.1.0版本的yaml文件

 wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml

vim   deploy.yaml

327行改成ingressnginx-controller的镜像

608,660行改成webhook的镜像

kubectl apply  -f  deploy.yaml

kubectl   get  pod  -n  ingress-nginx

看到这里就表示创建成功了

curl 请求了一下是404的页面这是正常的因为没有后端代理的pod,后面创建完ingress规则之后就可以了

三:测试

3.1 创建测试deploy和service

vim  test.yaml  #caddy  网页

apiVersion: v1
kind: Service
metadata:
  name: caddy
  namespace: default
spec:
  selector:
    app: caddy
  ports:
  - name: http
    targetPort: 80
    port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: caddy-deploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: caddy
  template:
    metadata:
      labels:
        app: caddy
    spec:
      containers:
      - name: caddy
        image: caddy:v1   #这个镜像我的node节点上面有所以就直接写上就可以了
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80

kubectl  apply  -f  test.yaml

vim  test1.yaml  #nginx  网页

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  selector:
    app: nginx
  ports:
  - name: http
    targetPort: 80
    port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: sjl-nginx:v1   #这个镜像我的node节点上面有所以就直接写上就可以了
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80

kubectl  apply  -f  test1.yaml

kubectl   get  pod 

kubectl  get  svc

可以看到已经成功创建出来了

3.2 创建一个ingress规则

vim  ingress-test.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  namespace: default
spec:
  ingressClassName: nginx           #指定ingress控制器
  rules:
  - host: sjl.caddy.com           #域名
    http:
      paths:
      - backend:
         service:
           name: caddy
           port:
            number: 80
        path: /
        pathType: Prefix       #根据url的/前缀进行匹配
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp1
  namespace: default
spec:
  ingressClassName: nginx           #指定ingress控制器
  rules:
  - host: sjl.nginx.com           #域名
    http:
      paths:
      - backend:
         service:
           name: nginx
           port:
            number: 80
        path: /
        pathType: Prefix       #根据url的/前缀进行匹配

kubectl  apply   -f   ingress-test.yaml

已经成功创建出来了

3.3,在windows中C:\Windows\System32\drivers\etc 目录下编辑hosts文件

192.168.8.128  sjl.caddy.com   sjl.nginx.com

浏览器访问

可以看到访问不同的域名就可以通过ingress-nginx控制器请求到后端的pod

31575端口是  ingress-nginx-controller的service映射的端口

访问流程

Internet   #外网
   ↓
Ingress Controller    控制器
   ↓    
Ingress        #ingress规则
   ↓
Service        #代理pod的service
   ↓
Pods

猜你喜欢

转载自blog.csdn.net/weixin_63294004/article/details/142776460