一、service
service是pod的路由代理抽象,用于解决pod之间的服务发现问题,即上下游pod之间使用的问题。
传统部署方式中,实例所在的主机ip(或者dns名字)一般是不会改变的,但是pod的运行状态可动态变化(比如容器重启、切换机器了、缩容过程中被终止了等),所以访问端不能以写死IP的方式去访问该pod提供的服务。
service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供代理。
二、service和pod关系
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "tomcat-yefp",
"namespace": "default",
"labels": {
"name": "tomcat-yefp"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 8080(访问端口),
"targetPort": 8080
}
],
"selector": {
"name": "app-tomcat(选择的pod的label)"
},
"type": "ClusterIP",
"sessionAffinity": "None"
}
}
四、endpoint
Endpoint是可被访问的服务端点,即一个状态为running的pod,它是service访问的落点,只有service关联的pod才可能成为endpoint。 Endpoint、service和pod的关系:
五、更改NodePort限制
Kubernetes默认对外的NodePort限制范围为30000-32767, 这里如果要使用一些常用的端口(80, 8080, 443)需将这个范围放大.
vi /etc/kubernetes/manifests/kube-apiserver.yaml
在--service-cluster-ip-range与insecure-port间添加如下node port配置
- --service-cluster-ip-range=10.96.0.0/12
- --service-node-port-range=0-32767
- --insecure-port=0
重启服务
systemctl restart kubelet
六、操作命令 1.创建Service
vi svc.yaml
apiVersion: v1
kind: Service
metadata:
name: demo
spec:
type: NodePort
ports:
- port: 80
nodePort: 80
selector:
app: httpd-demo
kubectl create -f svc.yaml
Tip: 如果要对某一Pod或deployment添加对外访问端口, 这里service添加的selector的键值需与之相对应.
2. 查看所有服务
kubectl get service
kubectl get svc
2. 查看开放的端口
kubectl get svc demo
3. 服务描述
kubectl describe service demo
4.重启服务
systemctl restart kubelet
https://blog.csdn.net/bbwangj/article/details/81812675