k8s学习-Service(概念、模板、创建、外部代理、删除等
迁移上云/容器化的过程中,可能存在部分上云/容器化,部分仍然在传统的服务器上,这样可以提前创建service去代理外部的服务,例如,web后端的api、mysql、redis等。也可以将ip改为nginx-svc,如果是访问某空间下的service,可以在service名称后加.namespace,例如service-svc.killer。上述模板创建一个名为nginx-svc的服务,自己的端口为
- 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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐
所有评论(0)