kubernetes学习记录(3)——集群外部访问Pod或Service
来源:互联网 发布:linux 统计ip访问流量 编辑:程序博客网 时间:2024/05/16 16:06
学习阅读的书籍为《kubernetes权威指南:从Docker到Kubernetes实践全接触》,书中有不少地方讲的比较模糊,故在此做下学习过程中的梳理。
Pod和Service是Kubernetes集群范围内的虚拟概念。集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问到它们。
解决措施:
1.将容器应用的端口号映射到物理机上,包括两种方式
通过设置容器级别的hostPort,将容器应用的端口号映射到物理机上。
建立Pod的yaml为:pod-hostport.yaml。需要注意,在yaml中不要使用tab,同时缩进会影响yaml中的数据结构,注意检查缩进。
apiVersion: v1kind: Podmetadata: name: webapp labels: app: webappspec: containers: - name: webapp image: kubeguide/tomcat-app:v2 ports: - containerPort: 8080 hostPort: 8081
需要注意!当指定hostPort之后,同一台宿主机将无法启动该容器的第2份副本。后面会有例子进行测试。
kubectl create -f pod-hostport.yaml
创建Pod时,需要下载基础镜像,推荐在nodes服务器上先下载好基础镜像,或者搭建本地docker镜像仓库,速度会快很多。
kubectl get pods -o wide
可以看到webapp被分配到了192.168.121.139这台node上。
curl 192.168.121.139:8081
使用curl访问该IP地址上的8081端口,可以获得返回值。
再创建pod-hostport-rc.yaml,对“当指定hostPort之后,同一台宿主机将无法启动该容器的第2份副本”这句话进行验证。
apiVersion: v1kind: ReplicationControllermetadata: name: hostporttest labels: app: hostporttestspec: replicas: 5 selector: app: hostporttest template: metadata: labels: app: hostporttest spec: containers: - name: hostporttest image: kubeguide/tomcat-app:v2 ports: - containerPort: 8080 hostPort: 8081
删除上文创建的pod。创建RC,查看pods的自动创建情况。
kubectl delete -f pod-hostport.yaml kubectl create -f pod-hostport-rc.yaml
我的node服务器一共有两台,IP地址分别为192.168.121.139和192.168.121.140。从上图可以看出,RC本来需要自动创建5个pod,但由于pod设定hostPort,所以每台node只能创建该容器的一个副本,最终只创建了2个Pod。
执行指令,查看处于Pending状态的Pod,以hostporttest-0krbs为例。
kubectl describe pod hostporttest-0krbs
可以看见,由于所有nodes都已创建了该容器的副本,所以该Pod没有可供分配的nodes。
设置Pod级别的hostNetwork=true。
该Pod中所有容器的端口号都将直接被映射到物理机上。如果容器的ports定义部分如果不指定hostPort,则默认hostPort等于containerPort。否则,指定的hostPort必须等于containerPort的值。
在此,直接编写pod-hostnetwork-rc.yaml,验证同一台宿主机上能否创建多个该pod。
apiVersion: v1kind: ReplicationControllermetadata: name: hostnetwork labels: app: hostnetworkspec: replicas: 5 selector: app: hostnetwork template: metadata: labels: app: hostnetwork spec: hostNetwork: true containers: - name: hostnetwork image: kubeguide/tomcat-app:v2 ports: - containerPort: 8080
kubectl create -f pod-hostnetwork-rc.yaml
结果显示每台宿主机仍是只能创建一个该pod。
2.将Service的端口号映射到物理机上,包括两种方式
通过设置nodePort映射到物理机,同时设置Service的类型为NodePort。
创建webapp-svc-nodeport.yaml。
apiVersion: v1kind: Servicemetadata: name: hostnetwork labels: app: hostnetworkspec: type: NodePort ports: - port: 8080 targetPort: 8080 nodePort: 30003 selector: app: hostnetwork
kubectl create -f webapp-svc-nodeport.yamlcurl 192.168.121.139:30003
可以获得返回结果。
通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。
这种用法仅用在公有云服务提供商的云平台上设置Service的场景。
- kubernetes学习记录(3)——集群外部访问Pod或Service
- kubernetes学习记录(11)——深入学习Service
- kubernetes学习2--RC/service/pod实践
- kubernetes学习2--RC/service/pod实践
- kubernetes学习记录(2)——基于Centos7.2的kubernetes集群自动安装与配置
- 在Kubernetes Pod中使用Service Account访问API Server
- kubernetes学习记录(1)——kubernetes初理解
- kubernetes学习记录(9)——集群基于CA签名的安全设置
- kubernetes学习记录(10)——建立Heapster+Influxdb+Grafana集群性能监控平台
- kubernetes学习记录(13)——网上集群基于CA签名安全设置的两种方式对比
- 如何从外部访问Kubernetes集群中的应用?
- Kubernetes Pod Cheatsheet——Pod数据结构参考图
- kubernetes学习记录(4)——创建kubernetes覆盖网络
- kubernetes学习记录(6)——Guestbook Demo
- kubernetes工作记录(1)——kubernetes1.7.4版集群的离线安装搭建过程记录
- kubernetes学习记录(0)——学习记录阅读顺序
- Kubernetes(k8s)学习笔记(二)—— 环境及集群搭建
- 使用kubernetes访问外部服务(mysql\redis)
- [框架]Spring boot主要内容
- Maven学习笔记
- [linux]:对于linux新手常用的20个命令
- 【WebService】WebService入门1
- 直接调用接口页面代码 或 页面调试接口
- kubernetes学习记录(3)——集群外部访问Pod或Service
- 查看sql数据库版本
- 数据结构——顺序栈
- 有没有职业规划的30岁,可以差出多少万年薪?
- luogu1049 【2001普及】装箱问题(dp)
- intellij 关闭自动保存和标志修改文件为星号
- 初试CSS-盒模型
- 复杂事件处理(Complex Event Processing)
- mysql一对多查询