k8s ingress 理解

k8s 可以通过三种方式将集群内服务暴露到外网,分别是NodePort、LoadBalancer、Ingress。

这里我们先介绍下Ingress。

ingress 一般是实现7层的转发,也可以实现4层。

这里我们也从nginx侧开始。

这里,我们看下 targetport port nodeport;

nodeport 就是外部访问端口

port 集群内部访问的端口 集群内部通过svc的时候的访问端口

targetport 是pod 控制器中定义的端口,即是应用访问的端口, 比如使用podip、127.0.0.1 的端口

经过kube_proxy流入到后端pod的targetPort上,最后进入容器。

一般情况下targetport 与 port 字段相同

办公室网络配置

upstream 反向代理可以让大家

upstream test_servers {

        server 10.191.10.1:30080

        server 10.191.10.2:30080

        server 10.191.10.3:30080

}

server {

        listen 80;

        server_name www.tomcat.com

        location / {

                proxy_pass http://test_servers

        }

}

ingress_controller 内部是监听的80 和 443,需要使用nodeport进行export出来

80 => 30080

443 =》 30443

ingress 侧的配置:

rules:

- host: "www.tomcat.com"

  http:

     paths:

     - pathType: Prefix

        backend:

                service: tomcat

                servicePort: 8080

service 配置

service 这里type是clusterIP, 除非service重建,实际这个clusterIp 也一直不会变;service的这个ClusterIp是一个虚拟Ip,仅仅存在于iptables规则,通过dnat实现访问clusterIp的负载均衡。

一个service 可能对应多个endpoint(Pod), client 访问的是clusterIp,通过iptables 或者IPVS 规则转发到real server,从而达到负载均衡的效果。例如一个service 有两个endpoint,但是dns查询时只会返回server的地址,具体client 访问的是哪个real server,是由iptables 或者 ipvs的规则决定的,客户端无法自行选择返回的是哪个endpoint。 

headless service:

访问headless service时,DNS查询会如实的返回所有的EndPoint(Pod IP地址)。对应于每一个EndPoints,即每一个Pod,都会有一个DNS域名,这样Pod之间即可相互访问。

返回

什么是headless service?

clusterIp为None的时候,即为headless service,kube-proxy 不会处理。DNS 如何实现依赖与Service 是否定义了selector。

cluster ip类型的service用于无状态的服务。headless service 则用于无状态的服务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值