k8s集群外部pod的5种访问方式

1.hostNetwork

hostNetwork设置对象为pod,当hostNetwork为true时,pod中的容器直接暴露在宿主机的网络环境中,可以直接通过宿主机的网络访问pod中的应用程序,即PodIp就是Node的IP。该模式下,每一个node只能启动一个同deployment的pod。

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  hostNetwork: true
  containers:
    - name: influxdb
      image: influxdb

我们可以直接通过宿主机的IP+端口来访问这个pod

curl -v 127.0.0.1:8086/ping

2.hostPort

hostPort的设置对象是容器,将容器的端口通过hostIP:hostPort的方式暴露出来。

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  containers:
    - name: influxdb
      image: influxdb
      ports:
        - containerPort: 8086
          hostPort: 8087

那么,通过以下命令也可以访问到influxdb容器

curl -v 127.0.0.1:8087/ping

3.NodePort

NodePort的设置对象是service,默认情况下service只能在集群内部通过ClusterIP访问。首先定义pod如下:

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
  labels:
    name: influxdb
spec:
  containers:
    - name: influxdb
      image: influxdb
      ports:
        - containerPort: 8086

创建NodePort service时,用户可以指定范围为30000-32767的端口,对该端口的访问就能通过 kube-proxy 代理到service后端的pod中。NodePort service的配置如下:

kind: Service
apiVersion: v1
metadata:
  name: influxdb
spec:
  type: NodePort
  ports:
    - port: 8086
      nodePort: 30000
  selector:
    name: influxdb

通过下面的命令就可以访问service

curl -v 127.0.0.1:30000/ping

4.LoadBalancer

LoadBalancer只能在云服务平台上使用(AWS、Azure等),LoadBalancer类型的service配置如下:

kind: Service
apiVersion: v1
metadata:
  name: influxdb
spec:
  type: LoadBalancer
  ports:
    - port: 8086
  selector:
    name: influxdb

查看一下service信息:

$ 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

我们可以通过外部IP和端口来访问这个service

curl -v 10.13.242.236:8086/ping

5.Ingress

Ingress Controller以docker容器的方式部署在k8s的顶部,简单来说就是k8s所使用的负载均衡器,类型有:nginx、envoy、HAProxy 等。

你可能感兴趣的:(k8s)