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 非常好用

最新文章

  1. C# - 缓存OutputCache(一)基础配置
  2. ios-UserDefaults
  3. 收藏夹里的js
  4. PostgreSQL9.2安装和配置指南
  5. 关于Unity中Camera的Aspect
  6. 2015GitWebRTC编译实录2
  7. linux服务器下tomcat部署项目内存溢出
  8. 3d touch 应用 2 -备用
  9. 算法系列001---dfs|多叉|解空间树理解
  10. MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
  11. lvs_dr
  12. 【php】windows安装PHP5.5+Apache2.4
  13. 【总结】关于YUV-RGB格式转换的一些个人理解
  14. 贯穿RobotFramework框架 - 关键字(一) 最全面的疏理
  15. Spring MVC 使用介绍(三)—— Controller接口控制器
  16. C# ToLookup
  17. Oracle TO_DATE() 函数格式化时间【全】
  18. JBPM使用方法、过程记录
  19. PHP移动互联网开发笔记(6)——MySQL数据库基础回想
  20. windows多线程(五) 互斥量 Mutex

热门文章

  1. java 压缩图片(只缩小体积,不更改图片尺寸)
  2. bat修改文件内容
  3. 数据分析,R语言
  4. 2018-2019-2 网络对抗技术 20165230 Exp8 Web基础
  5. 适合 ASP.NET Core 的超级-DRY开发
  6. ES6中的关键字 - const
  7. windowsServer-------- 系统中调出文件扩展名
  8. 【java】java 读写文件
  9. .net core mvc启动顺序以及主要部件3-Startup
  10. javascript中五种迭代方法实例