accessing-kubernetes-pods-from-outside-of-the-cluster
weight: 96
title: 从外部访问Kubernetes 中的Pod
date: ‘2022-05-21T00:00:00+08:00’
type: book
前面几节讲到如何访问
- hostNetwork
- hostPort
- NodePort
- LoadBalancer
- Ingress
说是暴露
hostNetwork: true
这是一种直接定义
如果在hostNotwork:true
配置的话,在这种
apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
hostNetwork: true
containers:
- name: influxdb
image: influxdb
部署该
$ kubectl create -f influxdb-hostnetwork.yml
访问该
curl -v http://$POD_IP:8086/ping
将看到
注意每次启动这个hostNetwork: true
的方式。
这种
hostPort
这是一种直接定义
hostPort
是直接将容器的端口与所调度的节点上的端口路由,这样用户就可以通过宿主机的
apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8086
hostPort: 8086
这样做有个缺点,因为
这种网络方式可以用来做
NodePort
ClusterIP
这种类型,这样的nodePort
。
apiVersion: v1
kind: Pod
metadata:
name: influxdb
labels:
name: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8086
同时还可以给nodePort
值,范围是--service-node-port-range
定义。
kind: Service
apiVersion: v1
metadata:
name: influxdb
spec:
type: NodePort
ports:
- port: 8086
nodePort: 30000
selector:
name: influxdb
集群外就可以使用round-robin
的方式转发给该
这种服务暴露方式,无法让你指定自己想要的应用常用端口,不过可以在集群上再部署一个反向代理作为流量入口。
LoadBalancer
LoadBalancer
只能在
kind: Service
apiVersion: v1
metadata:
name: influxdb
spec:
type: LoadBalancer
ports:
- port: 8086
selector:
name: influxdb
查看服务:
$ kubectl get svc influxdb
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
influxdb 10.97.121.42 10.13.242.236 8086:30051/TCP 39s
内部可以使用10.97.121.42:8086
。
外部可以用以下两种方式访问该服务:
- 使用任一节点的
IP 加30051 端口访问该服务 - 使用
EXTERNAL-IP
来访问,这是一个VIP ,是云供应商提供的负载均衡器IP ,如10.13.242.236:8086
Ingress
Ingress
是自
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: influxdb
spec:
rules:
- host: influxdb.kube.example.com
http:
paths:
- backend:
serviceName: influxdb
servicePort: 8086
外部访问http://influxdb.kube.example.com/ping
总结
总的来说