一 手动部署-官网版

1.1 获取资源

[root@master01 ~]# mkdir ingress

[root@master01 ~]# cd ingress/

[root@master01 ingress]# git clone https://github.com/nginxinc/kubernetes-ingress/

[root@master01 ingress]# cd kubernetes-ingress/deployments

[root@master01 ingress]# git checkout v1.7.0

1.2 安装RBAC

[root@master01 deployments]# kubectl apply -f common/ns-and-sa.yaml #部署namespace及ServiceAccount

[root@master01 deployments]# kubectl apply -f rbac/rbac.yaml #部署RBAC角色及权限等

1.3 安装基础资源

[root@master01 deployments]# kubectl apply -f common/default-server-secret.yaml

说明:

创建TLS证书和NGINX中默认服务器的secret。默认服务器返回Not Found页面,其中包含404状态代码,用于未定义的所有访问规则请求的返回值。默认包含了一个自签名的证书和生成的密钥。

[root@master01 deployments]# kubectl apply -f common/nginx-config.yaml

[root@master01 deployments]# kubectl apply -f common/vs-definition.yaml

[root@master01 deployments]# kubectl apply -f common/vsr-definition.yaml

[root@master01 deployments]# kubectl apply -f common/ts-definition.yaml #创建虚拟主机

[root@master01 deployments]# kubectl apply -f common/gc-definition.yaml

[root@master01 deployments]# kubectl apply -f common/global-configuration.yaml

1.4 安装ingress controllers

[root@master01 deployments]# vi daemon-set/nginx-ingress.yaml

 ……
- -global-configuration=$(POD_NAMESPACE)/nginx-configuration
……

[root@master01 deployments]# kubectl apply -f daemon-set/nginx-ingress.yaml

[root@master01 deployments]# kubectl get pods --namespace=nginx-ingress

NAME READY STATUS RESTARTS AGE

nginx-ingress-cqv2m 1/1 Running 0 43s

nginx-ingress-fpmbv 1/1 Running 0 43s

nginx-ingress-kdl9p 1/1 Running 0 43s

nginx-ingress-lggw9 1/1 Running 0 43s

nginx-ingress-lnw28 1/1 Running 0 43s

nginx-ingress-z8rn8 1/1 Running 0 43s

1.5 创建ingress controllers service

[root@master01 deployments]# vi service/nodeport.yaml

 apiVersion: v1
kind: Service
metadata:
name: nginx-ingress
namespace: nginx-ingress
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
nodePort: 30011
- port: 443
targetPort: 443
protocol: TCP
name: https
nodePort: 30012
selector:
app: nginx-ingress

[root@master01 deployments]# kubectl create -f service/nodeport.yaml

[root@master01 deployments]# kubectl get svc nginx-ingress --namespace=nginx-ingress

[root@master01 deployments]# kubectl describe svc nginx-ingress --namespace=nginx-ingress

参考文档:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/。

二 手动部署-github社区版(推荐)

2.1 获取资源

[root@master01 ~]# mkdir ingress

[root@master01 ~]# cd ingress/

[root@master01 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/baremetal/deploy.yaml

[root@master01 ingress]# vi deploy.yaml

 ……
apiVersion: apps/v1
kind: Deployment
……
spec:
replicas: 3
……
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
……
apiVersion: v1
kind: Service
……
name: ingress-nginx-controller
……
spec:
type: NodePort
externalTrafficPolicy: Local
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
nodePort: 80
- name: https
port: 443
protocol: TCP
targetPort: https
nodePort: 443
……

[root@master01 ingress]# kubectl create -f deploy.yaml

提示:添加默认backend需要等待default-backend创建完成controllers才能成功部署。

2.2 创建default backend

[root@master01 ingress]# vi default-backend.yaml

 ---
apiVersion: apps/v1
kind: Deployment
metadata:
name: default-http-backend
labels:
app.kubernetes.io/name: default-http-backend
app.kubernetes.io/part-of: ingress-nginx
namespace: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: default-http-backend
app.kubernetes.io/part-of: ingress-nginx
template:
metadata:
labels:
app.kubernetes.io/name: default-http-backend
app.kubernetes.io/part-of: ingress-nginx
spec:
terminationGracePeriodSeconds: 60
containers:
- name: default-http-backend
# Any image is permissible as long as:
# 1. It serves a 404 page at /
# 2. It serves 200 on a /healthz endpoint
image: k8s.gcr.io/defaultbackend-amd64:1.5
livenessProbe:
httpGet:
path: /healthz
port: 8080
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
ports:
- containerPort: 8080
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi ---
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
namespace: ingress-nginx
labels:
app.kubernetes.io/name: default-http-backend
app.kubernetes.io/part-of: ingress-nginx
spec:
ports:
- port: 80
targetPort: 8080
selector:
app.kubernetes.io/name: default-http-backend
app.kubernetes.io/part-of: ingress-nginx
---

[root@master01 ingress]# kubectl create -f default-backend.yaml

2.3 确认验证

[root@master01 ingress]# kubectl get pods -n ingress-nginx

[root@master01 ingress]# kubectl get svc -n ingress-nginx

参考文档:https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md。

三 ingress使用

3.1 创建demo环境

[root@master01 ingress]# vi deploy-demo01.yaml #创建第一个用于测试的svc和pod

 apiVersion: v1
kind: Service
metadata:
name: mydemo01svc
namespace: default
spec:
selector:
app: mydemo01
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydemo01pod
spec:
replicas: 3
selector:
matchLabels:
app: mydemo01
template:
metadata:
labels:
app: mydemo01
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v2
ports:
- name: httpd
containerPort: 80

[root@master01 ingress]# echo '<h1>Hello world!</h1>' > index.html #创建Tomcat测试页面

[root@master01 ingress]# scp index.html root@worker01:/etc/kubernetes/

[root@master01 ingress]# scp index.html root@worker02:/etc/kubernetes/

[root@master01 ingress]# scp index.html root@worker02:/etc/kubernetes/

[root@master01 ingress]# vi deploy-demo02.yaml #创建第二个用于测试的svc和pod

 apiVersion: v1
kind: Service
metadata:
name: mydemo02svc
namespace: default
spec:
selector:
app: mydemo02
ports:
- name: httpd
port: 8080
targetPort: 8080 ---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydemo02pod
spec:
replicas: 3
selector:
matchLabels:
app: mydemo02
template:
metadata:
labels:
app: mydemo02
spec:
containers:
- name: mytomcat
image: tomcat:9
ports:
- name: httpd
containerPort: 8080
volumeMounts:
- mountPath: "/usr/local/tomcat/webapps/ROOT/index.html"
name: sample-volume
readOnly: true
volumes:
- name: sample-volume
hostPath:
type: File
path: /etc/kubernetes/index.html

[root@master01 ingress]# kubectl apply -f deploy-demo01.yaml

[root@master01 ingress]# kubectl apply -f deploy-demo02.yaml

[root@master01 ingress]# kubectl get pods -o wide

[root@master01 ingress]# kubectl get svc -o wide

3.2 创建ingress策略

[root@master01 ingress]# vi deploy-demo-ingress-http.yaml

 apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-mydemo
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: demo01.linuxsb.com
http:
paths:
- path:
backend:
serviceName: mydemo01svc
servicePort: 80
- host: demo02.linuxsb.com
http:
paths:
- path:
backend:
serviceName: mydemo02svc
servicePort: 8080

[root@master01 ingress]# kubectl apply -f deploy-demo-ingress-http.yaml

[root@master01 ingress]# kubectl get pods -o wide

[root@master01 ingress]# kubectl get svc -o wide

[root@master01 ingress]# kubectl get ingress -o wide

3.3 确认验证

添加demo01.odocker.com和demo02.odocker.com的解析。分别访问两个地址:

参考:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/

四 ingress https使用

4.1 创建证书

使用自签名证书,证书创建参考《附008.Kubernetes TLS证书介绍及创建》。

4.2 创建secret

[root@master01 ingress]# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout demo02.key -out demo02.crt -subj "/CN=demo02.odocker.com"

[root@master01 ingress]# kubectl create secret generic demo02-tls --from-file=demo02.crt --from-file=demo02.key -n default

[root@master01 ingress]# kubectl get secret demo02-tls

NAME TYPE DATA AGE

demo02-tls Opaque 2 27s

4.3 创建TLS ingress策略

[root@master01 ingress]# vi deploy-demo-ingress-https.yaml

 apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-mydemo02-https
namespace: default
annotations:
kubernets.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- demo02.odocker.com
secretName: demo02-tls
rules:
- host: demo02.odocker.com
http:
paths:
- path:
backend:
serviceName: mydemo02svc
servicePort: 8080

[root@master01 ingress]# kubectl apply -f deploy-demo-ingress-https.yaml

4.4 确认验证

浏览器访问:https://demo02.odocker.com/。

附020.Nginx-ingress部署及使用的更多相关文章

  1. Nginx Ingress on TKE 部署最佳实践

    概述 开源的 Ingress Controller 的实现使用量最大的莫过于 Nginx Ingress 了,功能强大且性能极高.Nginx Ingress 有多种部署方式,本文将介绍 Nginx I ...

  2. Helm 安装Nginx Ingress

    为了便于将集群中的服务暴露到集群外部,需要使用Ingress.接下来使用Helm将Nginx Ingress部署到Kubernetes上. Nginx Ingress Controller被部署在Ku ...

  3. kubernetes nginx ingress controller部署

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

  4. 见异思迁:K8s 部署 Nginx Ingress Controller 之 kubernetes/ingress-nginx

    前天才发现,区区一个 nginx ingress controller 竟然2个不同的实现.一个叫 kubernetes/ingress-nginx ,是由 kubernetes 社区维护的,对应的容 ...

  5. Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress

    更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...

  6. [经验交流] Kubernetes Nginx Ingress 安装与使用

    Ingress 介绍 Kubernetes 上部署的微服务运行在它的私有网络中, 通过Pod实例的hostPort或Service实例的NodePort可以暴露到主机端口上,便于用户访问.但这样的方法 ...

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

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

  8. Kubernetes Ingress 部署

    Kubernetes Ingress 部署 Pod与Ingress的关系• 通过service相关联• 通过Ingress Controller实现Pod的负载均衡- 支持TCP/UDP 4层和HTT ...

  9. K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署

    Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...

  10. 11. Ingress及Ingress Controller(主nginx ingress controller)

    11. Ingress,Ingress Controller拥有七层代理调度能力 什么是Ingress: Ingress是授权入站连接到达集群服务的规则集合 Ingress是一个Kubernetes资 ...

随机推荐

  1. React安装及使用

    学习React之前.你可能需要学习: Html5.Css3.React.Antd.js. Html5的学习网站:http://www.w3school.com.cn/ Css3学习网站:http:// ...

  2. 苏浪浪 201771010120 《面向对象程序设计(java)》第9周学习总结

    实验九异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2. ...

  3. 【MySQL】剖析MySQL读写分离技术

    主从技术的一个基本流程图: 如何实现主从复制的呢: MySQL  Master(主节点) 1>当一个请求来时,首先由[mysqld]写入到我们的主[data]中 2>然后[mysqld]将 ...

  4. PHP 调用qq邮箱接口

    html代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  5. 符合PSR-0规范的自动加载

    PSR-0规范 命名空间必须与绝对路径一致 类名首字母必须大写 除去入口文件外,其他“.php”必须只有一个类 类文件必须自动载入,不采用include等 单一入口 1)目录结构 2)代码 入口文件i ...

  6. vue触发事件的五个关键字

    v-on    vue中提供了v-on事件绑定    v-on:click='函数';    v-on可以使用@代替 vue  五个触发事件关键字    .stop 用于阻止冒泡    例如 div1 ...

  7. MySQL复制表结构以及复制表等等

    mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 1 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2; 或 1 CREATE TABL ...

  8. protected和private的区别

    1. protected和private在没有继承关系的类A和类B之间其作用都可以视为式一样的--表示私有--每个类中的protected字段/属性都不能被访问到: 2. 当类与类之间存在继承关系时候 ...

  9. 多用户vps管理面板怎么安装,有没有好用的vps管理工具

    一.VPS安装VPSMate控制面板步骤 1.使用SSH连接到VPS.使用命令获取VPSMate安装包: wget   http://www.vpsmate.org/tools/install.py ...

  10. Take advantage of Checkra1n to Jailbreak iDevice for App analysis

    An unpatchable bootrom exploit called "checkm8" works on all iDevices up until the iPhone ...