Ingress使用示例
Ingress概念介绍
service只能做四层代理 无法做七层代理(如https服务)
lvs只能根据第四层的数据进行转发 无法对七层协议数据进行调度
Ingress Controller
拥有七层代理的Pod程序
Ingress资源
1.首先通过无头service动态关联符合标签选择器选择的后端Pod
2.Ingress动态的把service关联的pod地址注入到前端配置upstream中 同时触发主程序重新加载最新的配置文件
pod变化 > service变化 > Ingress变化 > Ingress Control注入配置
Ingress反代到后端的web服务器
1.部署后端pod
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
release: canary
ports:
- name: http
targetPort:
port:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
release: canary
ports:
- name: http
targetPort:
port:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas:
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v2
ports:
- name: http
containerPort:
ngx-deploy.yaml
2.创建ingress资源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-myapp
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: myapp.yxh.com
http:
paths:
- path:
backend:
serviceName: myapp
servicePort:
ingress-myapp.yaml
3.创建ingress controller的pod
[root@k8s-master ingress]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE 3d
nginx-ingress-controller-7d4c999994-pn6wt / Running 3d service_nodeport是用来给ingress-controller接入集群外部流量的
ingress-controller就是一个运行nginx的pod
service_nodeport就是nginx pod的service ingress-controller 的pod是由在git上下载的nginx-ingress中的yaml文件创建的
4.创建service_nodeport配置
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port:
targetPort:
protocol: TCP
nodePort:
- name: https
port:
targetPort:
nodePort:
protocol: TCP
selector:
app: ingress-nginx
service_nodeport.yaml
5.修改hosts文件
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# :: localhost
192.168.11.141 myapp.yxh.com
192.168.11.141 tomcat.yxh.com
6.浏览器访问

Ingress实现tomcat的https反代
1.部署tomcat pod
apiVersion: v1
kind: Service
metadata:
name: tomcat
namespace: default
spec:
selector:
app: tomcat
release: canary
ports:
- name: http
targetPort:
port:
- name: ajp
targetPort:
port:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deploy
namespace: default
spec:
replicas:
selector:
matchLabels:
app: tomcat
release: canary
template:
metadata:
labels:
app: tomcat
release: canary
spec:
containers:
- name: tomcat
image: tomcat:8.5.-jre8-alpine
ports:
- name: http
containerPort:
- name: ajp
containerPort:
tomcat-deploy.yaml
2.创建ssl证书
生成自签名证书
[root@k8s-master ingress]# openssl genrsa -out tls.key
Generating RSA private key, bit long modulus
.................................................................+++
...........................................................................................................+++
e is (0x10001)
[root@k8s-master ingress]# openssl req -new -x509 -key tls.key -out tls.out -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=tomcat.yxh.com
CN的设置必须和访问的域名设置为一样的 [root@k8s-master ingress]# ls
ingress-myapp.yaml ngx-deploy.yaml tls.key tomcat
ingress-nginx-nginx-0.13. service_nodeport.yaml tls.out 把生成的证书转换成secret资源对象
[root@k8s-master ingress]# kubectl create tls tomcat-ingress-cert --cert=tls.crt --key=tls.key [root@k8s-master ingress]# kubectl get secret
NAME TYPE DATA AGE
default-token-n87jl kubernetes.io/service-account-token 244d
tomcat-ingress-secret kubernetes.io/tls 1h
创建证书
3.创建tomact ssl ingress资源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-tomcat-tls
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- tomcat.yxh.com
secretName: tomcat-ingress-secret
rules:
- host: tomcat.yxh.com
http:
paths:
- path:
backend:
serviceName: tomcat
servicePort:
ingress-tomcat-tls.yaml
4.创建tomcat http ingress资源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-tomcat
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: tomcat.yxh.com
http:
paths:
- path:
backend:
serviceName: tomcat
servicePort:
ingress-tomcat.yaml
5.实现原理
执行kubectl apply|delete -f ingress-tomcat-tls.yaml的时候 都会把设置自动更新到ingress-controller的nginx的主配置文件中 并且能够立即生效
ingress-controller相当于一个ssl会话卸载器 客户端发送请求给controller必须时https协议 但是由controller把请求转发到集群内部的tomcat pod
的时候 使用的却是http协议
ingress_nginx_controller的配置 # find /etc -name nginx.conf /etc/nginx/nginx.conf
kubectl exec -n ingress-nginx -ti nginx-ingress-controller-7d4c999994-pn6wt -- /bin/sh
kubectl logs -n ingress-nginx nginx-ingress-controller-7d4c999994-pn6wt |grep error
## start server tomcat.yxh.com
server {
server_name tomcat.yxh.com ; listen ; listen [::]:; set $proxy_upstream_name "-"; listen ssl http2; listen [::]: ssl http2; # PEM sha: 8d7a91d9f8445a2e44ca5cef9dcea2c9bf8e7141
ssl_certificate /ingress-controller/ssl/default-tomcat-ingress-secret.pem;
ssl_certificate_key /ingress-controller/ssl/default-tomcat-ingress-secret.pem; ssl_trusted_certificate /ingress-controller/ssl/default-tomcat-ingress-secret-full-chain.pem;
ssl_stapling
nginx.conf
6.最终效果

Ingress使用示例的更多相关文章
- Kubernetes K8S之Ingress详解与示例
K8S之Ingress概述与说明,并详解Ingress常用示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- (八)Kubernetes Ingress资源
前言 Kubernetes提供了两种内建的云端负载均衡机制(cloud load balancing)用于发布公共应用,一种是工作于传输层的Service资源,它实现的是“TCP负载均衡器”,另一种是 ...
- Kubernetes Ingress简单入门
作者:Nick Ramirez 原文链接:https://thenewstack.io/kubernetes-ingress-for-beginners/ 本文转载自Rancher Labs 不知道你 ...
- Kubernetes-7.Ingress
docker version:20.10.2 kubernetes version:1.20.1 本文概述Kubernetes Ingress基本原理和官方维护的Nginx-Ingress的基本安装使 ...
- Kubernetes之Ingress
在Service篇里面介绍了像集群外部的客户端公开服务的两种方法,还有另一种方法---创建Ingress资源. 定义Ingress (名词)-进入或进入的行为;进入的权利;进入的手段或地点;入口. 接 ...
- 几张图解释明白 Kubernetes Ingress
来源:K8s技术圈 作者:阳明 Kubernetes Ingress 只是 Kubernetes 中的一个普通资源对象,需要一个对应的 Ingress 控制器来解析 Ingress 的规则,暴露服务到 ...
- kubernetes入门(04)kubernetes的核心概念(1)
一.ReplicationController/ReplicaSet 在Kubernetes集群中,ReplicationController能够确保在任意时刻,指定数量的Pod副本正在运行.如果Po ...
- Traefik HTTPS 配置
参考 add-a-tls-certificate-to-the-ingress Entry Points Definition 使用traefik作为ingress controller透出集群中的h ...
- 示例:Ingress通过互联网访问应用
Ingress Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路 ...
随机推荐
- [BZOJ2667][cqoi2012][kcoj]模拟工厂
题目描述 Description 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时刻时工厂的生产力加1:如果 ...
- axios post方式请求x-ww格式的数据
//使用axios时,要确定是json格式还是x-www格式的,axios默认是json格式的,如果是x-ww格式需要做如下配置: let url = "/hehe/site/getcomm ...
- 结合<span id="outer"><span id="inter">text</span></span>这段结构,谈谈innerHTML、outerHTML、innerText之间的区别
innerHTML 输出当前标签的文本内容,如果标签内有子标签,会连子标签本身和子标签内的文本内容一起输出. #outer输出子标签本身和子标签的内容:<span id="inter& ...
- VueCli3新特性
升级VueCli3的理由: 1.构建速度大大加快,之前看到一个升级的例子是2的3倍速度,具体可以在自己迁移一个项 目测试下,这里的优化有默认开启了多核构建.缓存 并行和缓存 2.webpack被内置到 ...
- C++ new delete 一维数组 二维数组 三维数组
h----------------------------- #include "newandmalloc.h" #include <iostream> using n ...
- Linux学习之编译运行.c(C语言)文件
在Linux命令行界面下,创建文件hello.c,进入vim编辑器,编辑一个简单的C语言文件 分解C语言文件执行过程,要经过预编译.编译.汇编.连接四个步骤后才能执行, 预编译:gcc -E hell ...
- SQL数据同步到ELK(一)- 日常开篇
需求 在我们的实际业务中,业务数据大部分是通过传统DB做持久化,但有时会使用Solr/Elastic Search等做搜索.缓存等其他服务,那么如何将数据同步到这些异构的存储系统中呢? 这就是我最近在 ...
- html页面添加左侧滑动菜单与内容部分的滚动条
html + css + jquery 展示地址:https://migloo.gitee.io/front 或 https://www.igloo.xin/front 思路: 1.通过jquery ...
- 深入理解JVM-对象已死吗
在堆中存放着Java世界中几乎所有的对象的实例,垃圾收集器在对堆进行垃圾回收前,第一件事情就是要确定这些对象中还有那些是"存活"着,那些已经死去(即不能再被任何途径使用的对象). ...
- Java随堂笔记一
今天开始了Java的正式复习,因为有两三年没有接触Java了,所以打算开始从头复习. 下面使课堂的一些随堂笔记,如果有遗忘,我可以随时翻阅该博客. public static void main(St ...