k8s Ingress-nginx 部署使用

k8s版本信息:v1.18.0

官方文档中,部署只要简单的执行一个yaml

https://github.com/kubernetes/ingress-nginx/blob/nginx-0.20.0/deploy/mandatory.yaml

mandatory.yaml这一个yaml中包含了部署ingress需要的资源的创建,包括namespace、ConfigMap、role,ServiceAccount等等所有部署ingress-controller需要的资源,修改真正修改的就是deployment这部分部分:

我们需要使用daemonset 部署到特定node,需要修改部分配置:先给要部署nginx-ingress 的 node打上特定标签,这里测试部署在”node-1″和”node-2″这两个节点。

kubectl label node k8s-node01 isIngress="true"
kubectl label node k8s-node02 isIngress="true"

这个是执行时已经改好的配置文件,主要是删除了deploment 和service的部分,添加了daemonset部分.

k8s Ingress-nginx 部署使用k8s Ingress-nginx 部署使用
cat mandatory.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx


kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx


apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx-ingress-serviceaccount
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: nginx-ingress-role
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - pods
      - secrets
      - namespaces
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      # Defaults to "-"
      # Here: "-"
      # This has to be adapted if you change either parameter
      # when launching the nginx-ingress-controller.

      - "ingress-controller-leader-nginx"
    verbs:
      - get
      - update
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - create
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: nginx-ingress-clusterrole-nisa-binding
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: nginx-ingress-clusterrole
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx

[root@k8s-master ~]#

mandatory.yaml

修改完后执行apply,并检查服务

kubectl apply -f mandatory.yaml
[root@k8s-master ~]# kubectl get daemonset -n ingress-nginx
NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR    AGE
nginx-ingress-controller   2         2         2       2            2           isIngress=true   21h
[root@k8s-master ~]# kubectl get po -n ingress-nginx -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
nginx-ingress-controller-qnj2t   1/1     Running   0          21h   192.168.10.30   k8s-node01
nginx-ingress-controller-z45z7   1/1     Running   10         21h   192.168.10.40   k8s-node02
[root@k8s-master ~]#

可以看到,nginx-controller的pod已经部署在在node01和node02上了。

到node02上看下本地端口:

netstat -lntup | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      25040/nginx: master
tcp        0      0 0.0.0.0:8181            0.0.0.0:*               LISTEN      25040/nginx: master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      25040/nginx: master
tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      25040/nginx: master
tcp6       0      0 :::10254                :::*                    LISTEN      24997/nginx-ingress
tcp6       0      0 :::80                   :::*                    LISTEN      25040/nginx: master
tcp6       0      0 :::8181                 :::*                    LISTEN      25040/nginx: master
tcp6       0      0 :::443                  :::*                    LISTEN      25040/nginx: master
tcp6       0      0 :::18080                :::*                    LISTEN      25040/nginx: master
[root@k8s-node01 ~]#

由于配置了hostNetwork,nginx已经在node主机本地监听80/443/8181端口。其中8181是nginx-controller默认配置的一个default backend。这样,只要访问node主机的公网IP,就可以直接映射域名来对外网暴露服务了。

配置ingress资源
部署完ingress-controller,接下来就按照测试的需求来创建ingress资源,创建ingress资源之前,需要创建好pod及service服务.

1.创建nginx pod及service服务,service名称为 ngx-service

cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        #image: nginx:latest
        image: ikubernetes/myapp:v2
        ports:
        - containerPort: 80
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:7-alpine
        ports:
        - name: httpd
          containerPort: 8080
        - name: ajp
          containerPort: 8009
[root@k8s-master ~]#

2.创建tomcat ingress资源。

cat ingress-tomcat.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
  annotations:
    kubernets.io/ingress.class: "nginx"
spec:
  rules:
  - host: test.tomcat.io
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat-svc
          servicePort: 8080
[root@k8s-master ~]#

3.主机添加host绑定解析即可访问测试.

k8s Ingress-nginx 部署使用

下面我们对tomcat服务添加httpds服务
创建私有证书及secret

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=test.tomcat.io"
kubectl create secret tls tls-secret --key=tls.key --cert tls.crt
kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-t55js   kubernetes.io/service-account-token   3      5d22h
tls-secret            kubernetes.io/tls                     2      68m
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl describe secret tls-secret
Name:         tls-secret
Namespace:    default
Labels:
Annotations:

Type:  kubernetes.io/tls

Data
====
tls.key:  1704 bytes
tls.crt:  1143 bytes
[root@k8s-master ~]#

将证书应用至tomcat服务中

cat ingress-tomcat.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
  annotations:
    kubernets.io/ingress.class: "nginx"
spec:
  tls:
    - hosts:
      - test.tomcat.io
      secretName: tls-secret
  rules:
  - host: test.tomcat.io
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat-svc
          servicePort: 8080
[root@k8s-master ~]#

访问服务:

k8s Ingress-nginx 部署使用

创建pod-svc-ingress服务:

k8s Ingress-nginx 部署使用k8s Ingress-nginx 部署使用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        #image: nginx:latest
        image: ikubernetes/myapp:v2
        ports:
        - containerPort: 80

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    # 定义域名
    - host: test.saneri.io
      http:
        paths:
        # 不同path转发到不同端口
          - path: /
            backend:
              serviceName: ngx-service
              servicePort: 80
          - path: /xxx
            backend:
              serviceName: ngx-service
              servicePort: 80

deploy-nginx.yaml

参考文档:

https://www.cnblogs.com/panwenbin-logs/p/9915927.html

https://github.com/kubernetes/ingress-nginx/blob/nginx-0.20.0/deploy/mandatory.yaml

https://blog.csdn.net/zhangjunli/article/details/107545984

https://blog.csdn.net/yucaifu1989/article/details/106898901/

Original: https://www.cnblogs.com/saneri/p/14480041.html
Author: 梦徒
Title: k8s Ingress-nginx 部署使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543261/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java MD5和SHA256等常用加密算法

    前言 我们在做 java项目开发的时候,在前后端接口分离模式下,接口信息需要加密处理,做签名认证,还有在用户登录信息密码等也都需要数据加密。 信&#x…

    Java 2023年6月13日
    093
  • 虚拟机安装红帽系统(rehl7.2)

    1、创建虚拟机 选择典型,下一步,安装程序光盘映像文件选择下载的红帽iso(64位下载链接:https://access.cdn.redhat.com/content/origin…

    Java 2023年6月5日
    0102
  • 三、《微服务:从设计到部署》–进程间通信IPC

    交互方式: 在单体应用中,组件可通过语言级方法或者函数相互调用。相比之下,基于微服务的应用是一个运行在多台机器上的分布式系统。通常,每个服务实例都是一个进程。因此,服务必须使用进程…

    Java 2023年6月5日
    098
  • Project Lombok (即 Lombok)学习记录

    参考文档 什么是 Project Lombok ? 下载 Project Lombok 支持的安装方式 安装 Project Lombok lombok.jar 安装 eclips…

    Java 2023年6月9日
    075
  • QThread停止线程

    1 强制停止线程,停止使用run函数启动的线程。 if (m_td != NULL){m_td->terminate();m_td->wait(); // 调用wait…

    Java 2023年5月30日
    091
  • ReentrantLock 公平锁源码 第1篇

    ReentrantLock 1 这篇还是接着ReentrantLock的公平锁,没看过第0篇的可以先去看上一篇https://www.cnblogs.com/sunankang/p…

    Java 2023年6月6日
    087
  • 基于react的nextjs服务端渲染框架学习使用

    该博客的示例代码我已经上传到github,欢迎star或者fork Next.js是一个基于React的一个服务端渲染简约框架。它使用React语法,可以很好的实现代码的模块化,有…

    Java 2023年5月30日
    086
  • 【leetcode】18. 四数之和

    题目 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c…

    Java 2023年6月6日
    081
  • Java编程思想重点笔记(Java开发必看)

    Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知…

    Java 2023年5月29日
    063
  • MySQL 数据库性能优化之索引优化

    Original: https://www.cnblogs.com/wxweven/archive/2012/04/18/2454984.htmlAuthor: wxwevenTi…

    Java 2023年6月9日
    0145
  • java 4舍5入

    /** * @Dscription: scale,保留几位小数点 molecular 分子,denominator 分母 * @Author: zyn * @Date: 2021/…

    Java 2023年5月29日
    079
  • ElasticSearch(二)检索的进阶

    ElasticSearch(二)检索的进阶 检索的进阶 SearchAPI ES支持两种基本方式的检索: https://www.elastic.co/guide/en/elast…

    Java 2023年6月5日
    0106
  • nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams (一)

    该文章来源于互联网,目前找不到原作者,放在这里的目的是记录healthcheck_nginx_upstreams的安装过程和相关配置,在起初安装成功后不能够正常运行healthch…

    Java 2023年5月30日
    087
  • Java 将Excel转为XML

    可扩展标记语言(XML)文件是一种标准的文本文件,它使用特定的标记来描述文档的结构以及其他特性。通常,我们可以通过格式转换的方式来得到XML格式的文件。本文,将通过Java代码介绍…

    Java 2023年5月29日
    062
  • SpringBoot入门学习看这一篇就够了

    1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架。 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要…

    Java 2023年6月7日
    066
  • nginx路径匹配中斜线的研究

    互联网应用中,nginx的作用算是一个非常典型且牛逼的存在,它让分布式应用部署变得简洁高效,尤其是在反向代理的配置部署中,nginx的简单易用,功能强大,性能优越。。。 但是,因为…

    Java 2023年5月30日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球