k8s 之service资源介绍(三)
kubernetes service资源
apiVersion: v1 kind: Service metadata: name: kubia spec: ports: - port: 80 targetPort: 8080 selector: app: kubia
kubectl get svc
kubectl exec kubia-id -- curl -s http://service_ip
双横缸代表着kubectl 命令项的结束,下面的是容器内部执行的命令
apiVersion: v1 kind: Service metadata: name: kubia spec: sessionAffinity: ClientIP
sessionAffinity属性默认为None,ClientIP 是保证特定客户端产生的请求每次都指向同一个pod
apiVersion: v1 kind: Service metadata: name: kubia spec: ports: - name: http port: 80 targetPort: 8080 - name: https port: 443 target: 8443 selector: app: kubia
标签选择器应用于整个服务,不能对每个端口做单独的配置
上面是采用端口号进行映射,还有一种方式给端口命名,这样在做映射的时候直接指向名称。好处是pod的端口随便改,而不用改service的配置如下:
kind: Pod metadata: name: kubia spec: containers: - name: kubia ports: - name: http containerPort: 8080 - name: https containerPort: 8443 apiVersion: v1 kind: Service spec: ports: - name: http port: 80 targetPort: http - name: https port: 443 targetPort: https selector: app: kubia
kubectl delete po --all 删除所有pod ,而不管pod的id
kubectl delete all --all all代表所有资源,--all代表所有资源对象
backend-database.default.svc.cluster.local
backend-database 服务名称
default 命名空间
svc.cluaster.local是在所有集群本地服务名称中使用的可配置集群域后缀
kubectl exec -ti kubia-3inly bash 运行bash很像 docker exec -ti id bash
不要ping kubernetes中创建的服务名称,这是因为服务的ip是一个虚拟的IP,只有在与服务端口结合时才有意义
endpoint资源
kubernetes service不仅可以暴露pod给外部,同样也可以把外部服务创建为服务让内部pod进行访问。服务并不是和pod直接相连的,有一种资源-endpoint介于两者之间。
endpoint资源就是暴露一个服务的IP地址和端口的列表,endpoint资源和其他kubernetes资源一样,所以可以使用kubectl info 来获取它的基本信息
kubectl describe svc kubia 执行此命令能看到endpoint资源
kubectl get endpoints kubia
我知道在创建service时定义了selector pod选择器,但在重定向传入连接时不会直接使用它。
选择器用于构建IP和端口列表,然后存储在EndPoint资源中。当客户端连接到服务时,服务代理选择这些IP和端口对中的一个,并将传入连接重定向到改位置监听的服务器。
EndPoint是一个单独的资源,而不是service的属性,所以我们可以单独的创建endpoint资源对象。
我们在创建service时不声明pod选择器就不会创建endpoint
apiVersion: v1 kind: Service metadata: name: external-service spec: ports: - port: 80
这里并没有定义selector
下面我们手动创建endpoint
apiVersion: v1 kind: Endpoints metadata: name: external-service 这里的名称一定和service的一致 subsets: - addresses: - ip: 1.1.1.1 - ip: 2.2.2.2 ports: - port: 80 这里的port是endpoint的目标端口,是service中的targetPort
以上就做了一个将外部服务通过service让内部pod可以访问。
还有一种简单的方式,给外部服务创建一个别名服务。
apiVersion: v1 kind: Service matedata: name: external-service spec: type: ExternalName 代码的type被设置成ExternalName externalName: someapi.somecompany.com 实际服务的完全限定名 ports: - port: 80
内部就可以使用external-service来访问服务了
kubectl get po --all-namespaces 非常好用
相关推荐
kunyus 2020-10-28
hubanbei00的家园 2020-10-25
btqszl 2020-10-21
shurenyun 2020-08-19
CurrentJ 2020-08-18
远远的山 2020-11-09
kaidiphp 2020-10-13
JustHaveTry 2020-09-29
cloudvtech 2020-09-18
BigDataMining 2020-08-21
朱培知浅ZLH 2020-11-16
cdbdqn00 2020-11-12
达观数据 2020-11-11
JustinChia 2020-11-11
jingtao 2020-11-08
大叔比较胖 2020-10-30
gracecxj 2020-10-30
onepiecedn 2020-10-29
JustHaveTry 2020-10-27