对于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. form 表单提交数据和文件(fromdata的使用方法)

    <!-- 数据和文件一次性提交 --> <form class="form_meren" id="mainForm" name="m ...

  2. CF1197B

    CF1197B 题意: 出n个柱子,每个柱子一个圆盘,其半径各不相同,每次只能将柱子上只有一个圆盘的移到相邻位置,问能否全部移到一个柱子上. 解法: 思路题. 如果所有盘子都能移动到同一个柱子上,那么 ...

  3. arcgis python 删除一个数据库所有数据

    # -*- coding: cp936 -*- import xlrd # must init xlrd import arcpy import os def main(): arcpy.env.wo ...

  4. ailoop2里面的1个待考察的,在ailoop3里面的操作。(先使用海巨人,不使用英雄技能召唤图腾的问题)

    承接上一篇博客HearthBuddy Ai 调试实战2 在使用海巨人的时候,少召唤了一个图腾(费用是对的) 研究ailoop2里面4个待考察的,在ailoop3里面的后续操作.ailoop3一共有36 ...

  5. mysql端口3306无法访问

    mysql主备复制,show slave status显示IO一直connecting 一.查看了防火墙,已经处于关闭状态 二.查看使用的复制用户的权限,也已经开放 三.telnet访问另外一台机器端 ...

  6. express利用nodemailer发送邮件(163邮箱)

    Nodemailer 是一个简单易用的Node.js邮件发送组件 首先安装这个组件 npm install nodemailer --save 安装之后,可以在某个get请求下,发送邮件,具体路由代码 ...

  7. SQL-W3School-高级:SQL 撤销索引、表以及数据库

    ylbtech-SQL-W3School-高级:SQL 撤销索引.表以及数据库 1.返回顶部 1. 通过使用 DROP 语句,可以轻松地删除索引.表和数据库. SQL DROP INDEX 语句 我们 ...

  8. centos7 搭建FTP

    通过yum安装vsftpd yum install -y vsftpd 修改vsftpd的配置文件 vim /etc/vsftpd/vsftpd.conf 修改配置文件如下: 1.不允许匿名访问 an ...

  9. pymysql检查是否断开, 断开重连

    python mysql使用持久链接 python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能~ 思路: 1 python mysql 的cping 函数 ...

  10. thinkphp模版主题使用方法

    3.1.3模版主题使用方法,手册貌似没有.配置项: 'DEFAULT_THEME'=>'default',//默认主题 'THEME_LIST'=>'default,theme',//主题 ...