k8s--ingress

此处svc 的作用仅仅是提供一个标签过滤器。 并不是通过svc --->pod .而是通过svc 过滤后端pod 节点后。ingress --->pod .当有变动时,也会进行动态识别。

问题:ingress-controller 也是一个pod ,它是怎么引入外部流量的?

只要是pod 都是私有ip 地址,那么外部流量怎么进行引入。

方法1:  给ingress-controller加svc,这个svc 还要是nodeport 类型。 请求先到达nodeport--->再代理给ingress-controller---->后端pod

引入集群外部流量的方式有三种, 1 nodeport  集群的每个节点都是引入外部集群流量的入口。nodeport 一般不是标准端口。那么还要外部负载   ,此方法不推荐

2.集群中最好有几个特殊的node ,这几个node 有公网地址,ingress-controller 他也是一个pod ,一般也要有pod 控制器进行控制,例如deployment 控制器,或者大恶魔你set。将这几个节点打标签,之后让ingress-controller 只运行再这几个节点上来。

这几个pod使用hostport,访问节点的端口能够转发给svc 端口---》pod  .节点端口---》ingress pod 端口

3.共享宿主机的网络空间,

以上就是ingress 引入外部流量方案。

使用service NodePort,Service externalIP 将集群外部流量引入到集群内部。工作与tcp/ip 协议的传输层。无法做到七层代理的相关功能

Host:hostPort,hostnetwork

Ingress:集群外部注入到集群内部的流量。

Egress:集群内部流出到集群外部的流量。

---

现代微服务体系下的各个业务模块彼此间都是通过http或者类似的承载协议进行通信的。

Ingress 在集群边缘统一打了一个洞,随后用户的请求再进入我们集群时都统一ingress 位置流入进来

    Ingress: 标准的资源类型
    Ingress Controller:Ingress控制器
        HTTP/TCP代理服务
            Ingress-Nginx: Kong
            HAProxy
            Envoy: Contour, Gloo
            Traefik
            ...

直接使用k8s 的api 资源类型。ingress 专门定义每个服务相匹配的配置文件。

ingress 并不跟任何一种实现有相关性。他是一种独立的描述性语言。只需要指明把那个虚拟主机的请求路由给那个后端服务。 至于于说用的nginx,haproxy, envoy,traefik。ingress 不关心。他要求,这个实现能主机加载ingress 并转为自己格式的配置文件。所以nginx 本身不适合这种应用。

nginx能理解ingress 资源的格式,并相应能转化为自己配置文件内容的实现。基于nginx 做的二次开发叫做ingress-nginx

ingress 是k8s上一种标准化的资源。为剥离与特定实现的相关性。而抽象出一种公共的格式。声明式配置格式,由特定ingress 的实现将转换并加载成自己的配置信息。还要求有特定的动态性。动态性指的是随时能够按需加载新配置。而且还能生效新配置。ingress 不能实现流量穿透.

那ingress 若运行为pod,y引入流量最终还是要靠传统的svc,host 的模式。

ingress 流量会直接转给pod,不经过svc.svc的作用是将pod分组,ingerss controller 还要借助于svc知道后端的pod 有谁。知道有谁是直接代理的。service 只是归类一组pod.并告诉ingress-contronller.那一组pod是服务的后端。流量不再经由svc调度。

1.部署

 

将此文本在浏览器打开,复制到服务器

技巧:set paste    #能解决vim粘贴混乱问题

此文本中的镜像文件为gcr的镜像。需要配置代理。

 

以上部署完成,但是功能怎么用呢?

它使用的是一个deployment控制器,还不能引入外部流量。

创建svc来引入

以上名称空间写错了,魏namespace:

目前从浏览器就能访问了。

有道云笔记 (youdao.com)


v1beta1 Ingress资源规范

apiVersion: extensions/v1beta1   # 资源所属的API群组和版本
kind: Ingress   # 资源类型标识符
metadata:  # 元数据
  name <string>  # 资源名称
  annotations:   # 资源注解,v1beta1使用下面的注解来指定要解析该资源的控制器类型
    kubernetes.io/ingress.class: <string>    # 适配的Ingress控制器类别
  namespace <string>  # 名称空间
spec:
  rules <[]Object>   # Ingress规则列表;
  - host <string>   # 虚拟主机的FQDN,支持“*”前缀通配,不支持IP,不支持指定端口
    http <Object>
      paths <[]Object>   # 虚拟主机PATH定义的列表,由path和backend组成
      - path <string>   # 流量匹配的HTTP PATH,必须以/开头
        pathType <string>  # 匹配机制,支持Exact、Prefix和ImplementationSpecific
        backend <Object>   # 匹配到的流量转发到的目标后端
          resource <Object>   # 引用的同一名称空间下的资源,与下面两个字段互斥
          serviceName <string>   # 引用的Service资源的名称
          servicePort <string>   # Service用于提供服务的端口
  tls <[]Object>   # TLS配置,用于指定上rules中定义的哪些host需要工作HTTPS模式
  - hosts <[]string>   # 使用同一组证书的主机名称列表
    secretName <string>   # 保存于数字证书和私钥信息的secret资源名称
  backend <Object>   # 默认backend的定义,可嵌套字段及使用格式跟rules字段中的相同
  ingressClassName  <string>   # ingress类名称,用于指定适配的控制器

v1 Ingress资源规范

apiVersion: networking.k8s.io/v1   # 资源所属的API群组和版本
kind: Ingress   # 资源类型标识符
metadata:  # 元数据
  name <string>  # 资源名称
  annotations:   # 资源注解,v1beta1使用下面的注解来指定要解析该资源的控制器类型
    kubernetes.io/ingress.class: <string>    # 适配的Ingress控制器类别
  namespace <string>  # 名称空间
spec:
  rules <[]Object>   # Ingress规则列表
  - host <string>   # 虚拟主机的FQDN,支持“*”前缀通配,不支持IP,不支持指定端口
    http <Object>
      paths <[]Object>   # 虚拟主机PATH定义的列表,由path和backend组成
      - path <string>   # 流量匹配的HTTP PATH,必须以/开头
        pathType <string>  # 支持Exact、Prefix和ImplementationSpecific,必选
        backend <Object>   # 匹配到的流量转发到的目标后端
          resource <Object>   # 引用的同一名称空间下的资源,与下面两个字段互斥
          service <object>  # 关联的后端Service对象
            name <string>  # 后端Service的名称
            port <object>  # 后端Service上的端口对象
              name <string>   # 端口名称
              number <integer>   # 端口号
  tls <[]Object>   # TLS配置,用于指定上rules中定义的哪些host需要工作HTTPS模式
  - hosts <[]string>   # 使用同一组证书的主机名称列表
    secretName <string>   # 保存于数字证书和私钥信息的secret资源名称
  backend <Object>   # 默认backend的定义,可嵌套字段及使用格式跟rules字段中的相同
  ingressClassName  <string>   # ingress类名称,用于指定适配的控制器
 

secret   和configmap  都是管理配置文件的,一个是明文,一个是base64编码。

如何定义tls 的ingress

首先定定义能引入流量集群内部

 

 制作screct 文件。 

 

 

 ------

dashboard的ingress 页面访问案例。

 

------

longhorn 案例

 

 

以上出现失败,原因是跳转出现问题,那么要怎么更改。

 

 

openshift  :ingress-nginx 只是众多ingress-contronller一种实现。能作为七层代理负载均衡器的都可以实现。比如redhat 的openshift.

openshift 默认使用的contronller 就是haproxy .网络插件ovs. 

envoy:c++开发。xds api  动态加载配置信息。支持从配置中心加载配置。

 客户端---》本身---》代理的服务器端。

接收客户端的组件叫做listenner,把后端服务器组织起来的组名叫做cluster.一个组叫一个cluster.

中间有个组件叫做filters .我们称为过滤器。notwork filters    四层 协议分析,解包等。

  http filgers  http分析,解包,打包router:路由功能

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值