• sh:源地址哈希(Source Hashing)
  • sed:最短预期延迟(Shortest Expected Delay)
  • nq:从不排队(Never Queue)
    在这里插入图片描述

模板

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-svc
  name: nginx-svc
spec:
  ports:
  - name: http # Service端口的名称
    port: 80 # Service的端口, service a访问service b,使用http://serviceb
    protocol: TCP # TCP或UDP SCTP 默认: TCP
    targetPort: 80 # 后端应用的端口
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:   # 筛选器
    app: nginx
  sessionAffinity: None
  type: ClusterIP # Service的类型

上述模板创建一个名为nginx-svc的服务,自己的端口为80、443,将请求代理到端口为80、443,且标签含app=nginx的pod上。
含有selector,会自动创建EndPoint对象(代理外部服务一节会提及)。

实战

创建

创建服务之前,先创建含有标签app=nginx的pod

kubectl get po -n killer --show-labels

在这里插入图片描述
命令

kubectl create -f service-nginx.yaml -n killer

结果
在这里插入图片描述

访问

命令

curl http://10.110.159.194:80

也可以将ip改为nginx-svc,如果是访问某空间下的service,可以在service名称后加.namespace,例如service-svc.killer
截图
在这里插入图片描述

修改

修改为NodePort类型
命令

kubectl edit svc nginx-svc -n killer

结果
修改内容
在这里插入图片描述
查看结果
在这里插入图片描述
这样外部就可以访问了
在这里插入图片描述

代理外部服务

迁移上云/容器化的过程中,可能存在部分上云/容器化,部分仍然在传统的服务器上,这样可以提前创建service去代理外部的服务,例如,web后端的api、mysql、redis等。

我们把前面的yaml文件修改一下,去除一下selector

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-svc-external
  name: nginx-svc-external
spec:
  ports:
  - name: http # Service端口的名称
    port: 80 # Service的端口, service a访问service b,使用http://serviceb
    protocol: TCP # UDP TCP SCTP default: TCP
    targetPort: 80 # 后端应用的端口
  sessionAffinity: None
  type: ClusterIP

将endpoint导出来
在这里插入图片描述
修改为以下yaml

apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: nginx-svc-external
  name: nginx-svc-external
subsets:
- addresses:
  - ip: 110.242.68.4
  ports:
  - name: http
    port: 80
    protocol: TCP

上面的ip是百度的:
在这里插入图片描述
分别创建service和对应的endpoint
在这里插入图片描述
访问结果如下:
在这里插入图片描述
可以看到Service代理了百度的内容,也可以向上面一样,改为NodePort类型,使用浏览器访问进行验证。

代理外部域名

上面的更加通用一点,如果仅仅是域名的话,可以使用ExternalName类型的Service。
我们把前面的yaml修改一下

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

创建后查看一下:
在这里插入图片描述
进入同ns下的pod访问一下:
在这里插入图片描述

删除

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐