附020.Nginx-ingress部署及使用
一 手动部署-官网版
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部署及使用的更多相关文章
- Nginx Ingress on TKE 部署最佳实践
概述 开源的 Ingress Controller 的实现使用量最大的莫过于 Nginx Ingress 了,功能强大且性能极高.Nginx Ingress 有多种部署方式,本文将介绍 Nginx I ...
- Helm 安装Nginx Ingress
为了便于将集群中的服务暴露到集群外部,需要使用Ingress.接下来使用Helm将Nginx Ingress部署到Kubernetes上. Nginx Ingress Controller被部署在Ku ...
- kubernetes nginx ingress controller部署
Kubernetes nginx ingress controller部署 1.下载kubernetes nginx的yaml文件 Wget https://raw.githubusercontent ...
- 见异思迁:K8s 部署 Nginx Ingress Controller 之 kubernetes/ingress-nginx
前天才发现,区区一个 nginx ingress controller 竟然2个不同的实现.一个叫 kubernetes/ingress-nginx ,是由 kubernetes 社区维护的,对应的容 ...
- Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress
更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...
- [经验交流] Kubernetes Nginx Ingress 安装与使用
Ingress 介绍 Kubernetes 上部署的微服务运行在它的私有网络中, 通过Pod实例的hostPort或Service实例的NodePort可以暴露到主机端口上,便于用户访问.但这样的方法 ...
- Kubernetes 服务入口管理与 Nginx Ingress Controller
Kubernetes 具有强大的副本,动态扩容等特性,每一次 Pod 的变化 IP 地址都会发生变化,所以 Kubernetes 引进了 Service 的概念.Kubernetes 中使用 Serv ...
- Kubernetes Ingress 部署
Kubernetes Ingress 部署 Pod与Ingress的关系• 通过service相关联• 通过Ingress Controller实现Pod的负载均衡- 支持TCP/UDP 4层和HTT ...
- K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署
Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...
- 11. Ingress及Ingress Controller(主nginx ingress controller)
11. Ingress,Ingress Controller拥有七层代理调度能力 什么是Ingress: Ingress是授权入站连接到达集群服务的规则集合 Ingress是一个Kubernetes资 ...
随机推荐
- [PHP学习教程 - 类库]002.FTP操作(FTP)
引言:FTP是大家上传至站点服务器必须要使用的协议.现在常用的FTP客户端工具也很多,如:8uftp,FlashFXP,....但是使用客户端工具就无法真正与自动化联系起来.所以今天,我们为大家讲一下 ...
- Java集合(十)实现Map接口的HashMap
Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...
- 03 . Nginx日志配置及日志切割
Nginx日志 日志对于统计排错来说是非常有利的,Nginx日志主要分为两种: access_log(访问日志)和error_log(错误日志),通过访问日志可以得到用户的IP地址.浏览器的信息,请求 ...
- DFA最小化
1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是什么? 文法中,对于某个非终结符号的规 ...
- Spring boot Sample 004之spring-boot-configuration-yaml
一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 通过yaml文件配置spring boot 属性文件 三.步骤 3.1.点击File -> New Project - ...
- js循环语句while,do..while,for
1. while循环 while(循环条件){ 循环体语句块; } 2.do..while循环 do{ 循环体语句块; }while(循环条件) 两者区别:while先判断后执行.循环体语句可能一次都 ...
- Java实现 LeetCode 187 重复的DNA序列
187. 重复的DNA序列 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对 ...
- Android Button的四种点击事件
bta1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.m ...
- java实现自行车行程
** 自行车行程** 计算行程 低碳生活,有氧运动.骑自行车出行是个好主意.小明为自己的自行车装了个计数器,可以计算出轮子转动的圈数.在一次骑车旅行中,出发时计算器的示数为begin,到达目的地时的示 ...
- java实现正六面体染色
** 正六面体染色** 正六面体用4种颜色染色. 共有多少种不同的染色样式? 要考虑六面体可以任意旋转.翻转. 参考答案: 240 Burnside引理,正方体涂色问题 (n^6 + 3*n^4 + ...