k8s-service和Ingress学习

这篇具有很好参考价值的文章主要介绍了k8s-service和Ingress学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

K8s服务发现

(1)其中主要包含serviceIngress两部分,其中service主要做内部服务的共享,Ingress主要做外部服务的发现。

k8s-service学习

(1)首先看一下service的网络结构图。

  • 首先部署了2个nginx服务,分别部署在node1node2节点上。
  • 起一个可以访问node1node2节点上的nginxservice服务。
  • 首先通过nginx-svc的端口进入service,然后通过Endpoint找到2个node中的kube-proxy
  • 然后通过kube-proxy代理到2个nginx服务的pause,找到其具体的地址。然后访问nginx服务。

k8s service ingress配置,kubernetes,学习,linux,云原生,k8s

1.service的配置文件

apiVersion: v1
kind: Service  #资源类型
metadata:
  name: nginx-svc  # service的名字
  labels:
    app: nginx  # service自己本身的标签
spec:
  selector:   # 匹配那些pod会被该service代理
    app: nginx-deploy  # 所有匹配到该标签的pod都可以通过该servcie进行访问
  ports: # 端口映
  - port: 80   # service自己的端口 ,在使用内网ip时访问使用
    targetPort: 80  # 目标pod的端口
    name: web  # 为端口起个名字
  type: NodePort  # 随机启动一个端口,映射到ports里面的端口,该端口绑定在node上,且集群中每个node都会绑定这个端口

2.service基础操作

# 创建 service
kubectl create -f nginx-svc.yaml

# 查看 service 信息,通过 service 的 cluster ip 进行访问
kubectl get svc 

# 查看 pod 信息,通过 pod 的 ip 进行访问
kubectl get po -owide

# 创建其他 pod 通过 service name 进行访问(推荐)
kubectl exec -it busybox -- sh
curl http://nginx-svc

# 默认在当前 namespace 中访问,如果需要跨 namespace 访问 pod,则在 service name 后面加上 .<namespace> 即可
curl http://nginx-svc.default

3.service通过ip对外部进行访问

(1)编写 service 配置文件时,不指定 selector 属性。

# 新建一个service配置文件
vim nginx-svc-external.yaml
# 配置文件内容如下
apiVersion: v1
kind: Service  #资源类型
metadata:
  name: nginx-svc-external  # service的名字
  labels:
    app: nginx  # service自己本身的标签
spec:
  ports: # 端口映
  - port: 80   # service自己的端口 ,在使用内网ip时访问使用
    targetPort: 80  # 目标pod的端口
    name: web  # 为端口起个名字
  type: ClusterIP  # 随机启动一个端口,映射到ports里面的端口,该端口绑定在node上,且集群中每个node都会绑定这个端口
  #创建该服务
  kubectl create -f nginx-svc-external.yaml

(2)自己创建endpoint。通过访问nginx-svc-external服务,从而访问到百度官网。

# 新建一个endpoint的配置文件
vim nginx-ep-external.yaml
# 配置文件内容如下
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: nginx # 与 service 一致
  name: nginx-svc-external # 与 service 一致
  namespace: default # 与 service 一致
subsets:
- addresses:
  - ip: 110.242.68.4 # 目标 ip 地址 此处使用的是百度的ip地址
  ports: # 与 service 一致
  - name: web
    port: 80
    protocol: TCP
# 创建endpoint服务
kubectl create -f nginx-ep-external.yaml 

(3)使用测试工具进行测试。

# 以命令行方式进入
kubectl exec -it dns-test -- sh
# 使用以下命令就可以访问到baidu的页面
wget http://nginx-svc-external

4.service通过域名的方式对外部进行访问

其中配置文件如下,操作流程和跟ip对外访问一样。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: baidu-external-domain
  name: baidu-external-domain
spec:
  type: ExternalName
  externalName: www.baidu.com

5.service常用类型

(1)ClusterIP:只能在集群内部使用,不配置类型的话默认就是 ClusterIP

(2)ExternalName:返回定义的 CNAME别名,可以配置为域名。

(3)NodePort:会在所有安装了 kube-proxy 的节点都绑定一个端口,此端口可以代理至对应的 Pod,集群外部可以使用任意节点 ip + NodePort 的端口号访问到集群中对应 Pod 中的服务。当类型设置为 NodePort 后,可以在ports 配置中增加 nodePort 配置指定端口,需要在下方的端口范围内,如果不指定会随机指定端口,端口范围:30000~32767。

(4)LoadBalancer:使用云服务商(阿里云、腾讯云等)提供的负载均衡器服务。

k8s-ingress学习

(1)如下图所示可以看到Ingress的作用。用户首先通过绑有域名的负载均衡器进入到ingress,然后ingress下绑定到service,再通过service找到Pod

k8s service ingress配置,kubernetes,学习,linux,云原生,k8s

1.ingress-niginx的安装

(1)首先要安装HelmHelm就是像wget一样的下载工具。

# 下载二进制文件
wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz

# 进行解压
tar -zxvf helm-xxxx-linux-amd64.tar.gz

# 将解压目录下的文件移动到usr/local/bin
cp helm /usr/local/bin/

#查看是否安装成功
helm version

(2)下载ingress-nginx,本文使用的是4.4.2版本。

​ (本例中一开始下载的是ingress-nginx,4.9.0,会出现Role.yaml.....Err,换回到4.4.2就不报错了)

# 添加仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# 查看仓库列表
helm repo list

# 查看所有版本
helm search repo ingress-nginx -l

# 下载指定版本
helm fetch  ingress-nginx/ ingress-nginx --version x.x.x

# # 将下载好的安装包解压
tar xf ingress-nginx-xxx.tgz

(3)配置 values.yaml文件。此处搜索可以使用/进行搜索。


# 先修改controller处的镜像地址,修改为国内镜像
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/nginx-ingress-controller

# 注释掉controller处的digest和digestChroot

# 查找kube-webhook,修改此处的image和registry
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/kube-webhook-certgen

# 注释掉kube-webhook下面的digest和pullPolicy,再将此处的tag改为和controller处一致的版本。

# 找到hostNetwork
hostNetwork: true

# 找到dnsPolicy
dnsPolicy: ClusterFirstWithHostNet

# 找到DaemonSet,将kind:Deployment修改为DaemonSet

# 将DaemonSet下面的nodeSelector添加一行
ingress: "true"

# 找到admissionWebhooks
admissionWebhooks.enabled 改为false

# 找到service中的tyep:LoadBalancer 
type:ClusterIP

(3)安装ingress-nginx

# 为 ingress 专门创建一个 namespace
kubectl create ns ingress-nginx

# 为需要部署 ingress 的节点上加标签
kubectl label node node1 ingress=true

# 安装 ingress-nginx
helm install ingress-nginx ./ingress-nginx -n ingress-nginx

# 查看ingress-nginx是否安装成功
kubectl get po -n ingress-nginx -o wide

2.ingress配置文件

apiVersion: networking.k8s.io/v1
kind: Ingress # 资源类型为 Ingress
metadata:
  name: wolfcode-nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules: # ingress 规则配置,可以配置多个
  - host: k8s.jiegeng.cn # 域名配置,可以使用通配符 *
    http:
      paths: # 相当于 nginx 的 location 配置,可以配置多个
      - pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配
        backend:
          service: 
            name: nginx-svc # 代理到哪个 service
            port: 
              number: 80 # service 的端口
        path: /api # 等价于 nginx 中的 location 的路径前缀匹配
# 创建ingress
kubectl create xxxx(yaml文件名称)

3.ingress的测试

(1)当创建好ingress后,去C:\Windows\System32\drivers\etc,找到host文件,然后将部署了ingress-nginx的节点的IP地址写入host,并在其后加入ingress配置文件中的域名,本文这里为k8s.jiegeng.cn,如下图所示。(这里如果电脑修改不了C盘的配置文件可以去网上找资料查看)。

k8s service ingress配置,kubernetes,学习,linux,云原生,k8s

(2)进行测试,在网页搜索框中输入k8s.jiegeng.cn,就可以跳转到Nginx的主页了,如下图所示。

k8s service ingress配置,kubernetes,学习,linux,云原生,k8s

4.ingress的多域名配置

(1)其配置文件如下,其操作和上文中单域名的操作一样。

apiVersion: networking.k8s.io/v1
kind: Ingress # 资源类型为 Ingress
metadata:
  name: wolfcode-nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules: # ingress 规则配置,可以配置多个
  - host: k8s.jiegeng.cn # 域名配置,可以使用通配符 *
    http:
      paths: # 相当于 nginx 的 location 配置,可以配置多个
      - pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配
        backend:
          service: 
            name: nginx-svc # 代理到哪个 service
            port: 
              number: 80 # service 的端口
        path: /api # 等价于 nginx 中的 location 的路径前缀匹配
      - pathType: Exec # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配>,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配
        backend:
          service:
            name: nginx-svc # 代理到哪个 service
            port:
              number: 80 # service 的端口
        path: /
  - host: api.jiegeng1.cn # 域名配置,可以使用通配符 *
    http:
      paths: # 相当于 nginx 的 location 配置,可以配置多个
      - pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配>,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配
        backend:
          service:
            name: nginx-svc # 代理到哪个 service
            port:
              number: 80 # service 的端口
        path: /

总结

(1)service主要主要用于集群内部的服务发现和访问。

(2)Ingress主要用于管理集群外部的HTTPHTTPS流量的路由。文章来源地址https://www.toymoban.com/news/detail-827562.html

到了这里,关于k8s-service和Ingress学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用

    前面讲解了使用Helm部署mysql集群,这里来看看使用Ingress搭建负载均衡功能 功能类似 Nginx ,可以根据域名、路径把请求转发到不同的 Service , Ingress 为外部访问集群提供了一个 统一 入口, 避免 了 对外暴露集群端口 ,可以配置 https,http访问集群应用,接下来看看如何通过腾讯云来

    2024年01月22日
    浏览(57)
  • k8s配置ingress访问集群外部资源

    使用ingress访问外部资源,首先需要创建service指向我们需要访问的资源 而每个service包含一个endpoint endpoint是k8s集群中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址。service配置selector,endpoint controller才会自动创建对应的endpoint对象;否则,不会生

    2024年02月09日
    浏览(42)
  • K8s(Kubernetes)学习(六)——Ingress

    什么是 Ingress Ingress 和 Service 区别 Ingress 控制器 Traefik 使用 Ingress Route的定义 1 简介 https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/ Ingress 是一种 Kubernetes 资源类型,它允许在 Kubernetes 集群中暴露 HTTP 和 HTTPS 服务 。通过 Ingress,您可以将流量路由到不同的服务和端点,而

    2024年02月07日
    浏览(41)
  • 【kubernetes系列】k8s ingress配置websocket支持

    背景:公司的后端同事在代码调试过程中需要上传一个文件,调用的websocket接口 浏览器上传文件一直卡主,通过浏览器调试模式发现无法正常获取websocket的连接 websocket的接口访问可以通过wscat命令(需单独安装)测试。 浏览器访问报错如下: WebSocket connection to ‘ws://*******

    2024年02月06日
    浏览(50)
  • K8s的ingress-nginx配置https

    在另一台机器上配置hosts解析www.yaoyao.com,然后访问 curl --cacert tls.crt https://www.yaoyao.com:10443 这里的10443端口是ingress-nginx-controller服务暴露的nodeport端口

    2024年02月07日
    浏览(36)
  • k8s ingress 添加获取客户端真实ip配置

    本环境是一个互联网ip服务器上的nginx转发k8s集群内的ingress域名,实现所有服务通过域名访问, 默认配置下,在pod内获取客户端请求地址信息时,获取的是pod的ip和节点ip。要获取客户端ip,需要添加nginx配置中 除此之外还需要修改configmap ingress-nginx-controller ,增加如下配置

    2024年02月02日
    浏览(40)
  • K8S应用笔记 —— 签发自签名证书用于Ingress的https配置

    在本地签发自命名证书,用于 K8S 集群的 Ingress 的https配置。 前提条件: 完成 K8S 集群搭建。 完成证书制作机器的 openssl 服务安装。 2.1.1 CA.sh脚本准备 注意事项: openssl 服务默认 CA.sh 地址为: /etc/pki/tls/misc/CA.sh ,为证书拷贝方便基于原 CA.sh 进行复制对其原部分路径改写(改

    2024年02月12日
    浏览(42)
  • 【k8s完整实战教程5】网络服务配置(nodeport/loadbalancer/ingress)

    系列文章:这个系列已完结,如对您有帮助,求点赞收藏评论。 读者寄语: 再小的帆,也能远航! 【k8s完整实战教程0】前言 【k8s完整实战教程1】源码管理-Coding 【k8s完整实战教程2】腾讯云搭建k8s托管集群 【k8s完整实战教程3】k8s集群部署kubesphere 【k8s完整实战教程4】使用

    2024年02月13日
    浏览(61)
  • nginx 多层代理 + k8s ingress 后端服务获取客户真实ip 配置

    1.nginx http 七层代理 修改命令空间: namespace: nginx-ingress : configmap:nginx-configuration 添加如上配置 compute-full-forwarded-for: “true” forwarded-for-header: X-Forwarded-For use-forwarded-headers: “true” 即可; 2. nginx stream 4层代理: nginx 需要编译增加–with-stream_realip_module模块,然后对应的server块

    2024年02月08日
    浏览(43)
  • k8s ingress

    一、浅谈ingress (ingress 是与service配合使用的)  Ingress能把Service(Kubernetes的服务)配置成外网能够访问的URL,流量负载均衡,及SSL,并提供域名访问的虚拟主机等,客户通过访问URL(API资源服务的形式,例如:caas.one/kibana)进入和请求Service,一个Ingress控制器负责处理所有

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包