对于k8s传统的svc来说 它仅支持4层代理,如果遇到7层代理的话,是没有办法去实现的
k8s官方在1.11中推出了ingress api接口,通过ingress达到7层代理的效果
对于ingress来说,必须要绑定一个域名,因为它是基于7层代理的
 
资料信息 
Ingress-Nginx github 地址:httos://github.com/kubernetes/ingress-nginx 
Ingress-Nginx 官方网站:https:/kubernetes.github.io/ingress-nginx/
 
访问流程图
  本质上是创建了一个Nginx的Node pod,只不过这个无需手写Nginx的配置文件而是通过自动生成的方式实现

⒈部署Ingress-Nginx

  1.下载资源文件

#下载资源文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

  ⒉创建

kubectl apply -f mandatory.yaml

  ⒊查看

kubectl get pod -n ingress-nginx

  ⒋选择不同的暴露方案执行【此处选择裸机暴露方案,就是以svc暴露】

#下载
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml #创建
kubectl apply -f service-nodeport.yaml

  ⒌查看

kubectl get svc -n ingress-nginx

⒉Ingress方案

  1.Ingress HTTP 代理访问

    ㈠Deployment

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-dm
spec:
replicas: 2
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: fanqisoft/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80

    ㈡Service

apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx

    ㈢Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
rules:
- host: www.coreqi.cn
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80

    3.查看服务端口

kubectl get svc -n ingress-nginx

    4.将相关域名写入host文件

    5.在浏览器中进行HTTP访问

  2.Ingress HTTPS代理访问

    1.创建证书及cert存储方式

openssl req -x509 -sha256 -nodes -days  -newkey rsa: -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

    2.创建相关资源

      ㈠Deployment

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment3
spec:
replicas: 2
template:
metadata:
labels:
name: nginx3
spec:
containers:
- name: nginx3
image: fanqisoft/myapp:v3
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80

        ㈡Service

apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
name: nginx3

        ㈢Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
tls:
- hosts:
- foo.bar.com
secretName: tls-secret
rules:
- host:foo.bar.com
http:
paths:
- path: /
backend:
serviceName: svc-3
servicePort: 80

    3.查看服务端口

kubectl get svc -n ingress-nginx

    4.将相关域名写入host文件

    5.在浏览器中进行HTTP访问

⒊Nginx添加BasicAuth(基础认证)功能

  1.安装相关模块并创建密钥

  对于Nginx的认证方案来说,采用的是Apache的一个模块,所以在配置Nginx的认证之前,需要先安装Apache的模块.
  因为Ingress的实现方案采用的是Nginx的软件,所以Nginx的相关特性Ingress都支持.

#密码文件的创建
yum -y install httpd
htpasswd -c auth fanqi #创建密钥文件,文件名为auth,用户名为fanqi
#把该文件以secret方式进行保存,类型为generic
kubectl create secret generic basic-auth --from-file=auth

  2.创建Ingress资源

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-with-auth
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
rules:
- host: foo2.bar.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80

⒋Nginx进行URL重定向

  1.相关属性

名称 描述 值类型

nginx.ingress.kubernetes.io/rewrite-

target

必须重定向流量的目标URI string

nginx.ingress.kubernetes.io/ssl-

redirect

指示位置部分是否仅可访问SSL(当Ingress包含证书时
默认为True)

bool

nginx.ingress.kubernetes.io/force-

ssl-redirect

即使lngress未启用TLS,也强制重定向到HTTPS bool

nginx.ingress.kubernetes.io/app-

root

定义Controller必须重定向的应用程序根,如果它在‘/’上下文中 string

nginx.ingress.kubernetes.io/use-

regex

指示Ingress上定义的路径是否使用正则表达式 bool

  2.创建资源示例

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: http://foo.bar.com:31795/hostname.html
spec:
rules:
- host: foo10.bar.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80

Kubernetes---Service(SVC)服务--ingress api的更多相关文章

  1. Docker Kubernetes Service 网络服务代理模式详解

    Docker Kubernetes  Service 网络服务代理模式详解 Service service是实现kubernetes网络通信的一个服务 主要功能:负载均衡.网络规则分布到具体pod 注 ...

  2. Service Mesh服务网格新生代--Istio(转)

    万字解读:Service Mesh服务网格新生代--Istio  官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...

  3. C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service

    关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关,后面发现坑比较多,弄起来比较麻烦,就放弃了.目前写完了查看 Kubernetes Service 信息.创建 ...

  4. Kubernetes基于haproxy实现ingress服务暴露

    HAproxy Ingress控制器 HAproxy Ingress简介 HAProxy Ingress watches in the k8s cluster and how it builds HA ...

  5. 干货分享:如何使用Kubernetes的Ingress API

    您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定义并提供许多插件)来极大地扩展Ingress资源的功能. Kubernetes正在整个技术行业中得到采用 ...

  6. WCF 在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下:

    WCF的service端的webconfig如下: <?xml version="1.0"?> <configuration> <system.ser ...

  7. Kubernetes---Service(SVC)服务

    ⒈介绍 kubernetes 通过标签选择的方式来匹配一组pod,然后提供对外访问的一种机制 一组pod可以对应到多个svc的 每一个service(svc)都可以理解为一个微服务 Service有且 ...

  8. 【解构云原生】初识Kubernetes Service

    编者按:云原生是网易杭州研究院(网易杭研)奉行的核心技术方向之一,开源容器平台Kubernetes作为云原生产业技术标准.云原生生态基石,在设计上不可避免有其复杂性,Kubernetes系列文章基于网 ...

  9. kubernetes系列(十) - 通过Ingress实现七层代理

    1. Ingress入门 1.1 Ingress简介 1.2 原理和组成部分 1.3 资料信息 2. Ingress部署的几种方式 2.1 前言 2.1 Deployment+LoadBalancer ...

随机推荐

  1. DRF-认证 权限 频率组件

    补充 1 认证 权限 频率组件原理基本相同 2 认证相关: session cookie token 认证相关的  这里用token token 1 有时间限制,超时则失效 2 每次登录更换一个tok ...

  2. Til the Cows Come Home ( POJ 2387) (简单最短路 Dijkstra)

    problem Bessie is out in the field and wants to get back to the barn to get as much sleep as possibl ...

  3. 数据结构实验之栈与队列二:一般算术表达式转换成后缀式(SDUT 2132)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; int ok(char ch, char ...

  4. java 构造方法中super()和this()

    1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 3)super: 它引用当前对 ...

  5. Java高并发下的 “单例模式”

    前言:单例模式大家应该很熟悉了,我在这里就自己总结一下自己这段时间学到的单例相关的知识. 单例模式的目的:保证一个类只有单一的实例,也就是说你无法通过new来创建这个类的一个新实例. 单例模式的意义: ...

  6. Pstools使用

    pstool的介绍 PsTools是Sysinternals Suite中一款排名靠前的一个安全管理工具套件.现在被微软收购.目前pstools中含有12款各式各样的小工具.如果将它们灵活的运用,将会 ...

  7. MySQL的概述和基础(学习整理)

    1. 数据库基本概念 数据库(DataBase,DB)是用来存储和管理数据的仓库.与其他种类存储和管理数据的方式有所不同的是,数据库是兼持久化存储数据.便捷存储管理数据.使用统一的方式操作数据库几个特 ...

  8. 拆分项目搞成framework 实例

    目前工作中遇到的问题,是讲项目三大模块拆分, 将Discover.Shop和Events的源代码拆分到独立的项目中 拆分是个麻烦事,里面相互依赖很多 ,打包编译也异常复杂,各种报错 编译Event 遇 ...

  9. AcFun 的视频架构演化实践——阅读心得

    视频的核心技术栈 AcFun 弹幕视频网(acfun.tv)是中国最早上线的弹幕视频网站,也是最具影响力的弹幕视频平台.“AcFun”原取意于“AnimeComic Fun”.自2007年6月6日成立 ...

  10. StateListDrawable

    可供设置的属性如下: drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态~ state_focused:是否获得焦点 state_window_focused: ...