kubernetes集群外部访问Pod或Service

由于Pod和Service是kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP
地址或者Service的虚拟IP地址和虚拟端口号访问到它们。为了让外部客户端可以访问这些服务,可以将
Pod或Service的端口号映射到宿主机,以使得客户端应用能够通过物理机访问容器应用。
将容器应用的端口号映射到物理机

(1) 通过设置容器级别的hostPort,将容器应用的端口号映射到物理机上:

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  containers:
  - name: webapp
    image: tomcat
    ports:
    - containerPort: 8080
      hostPort: 8081 # 通过物理机的IP地址和8081端口访问Pod的tomcat服务

(2) 通过设置Pod级别的hostNetwork=true,改Pod中所有容器的端口号都将被直接映射到物理机上。设置hostNetwork=true时需要注意,在容器的ports定义部分如果不指定hostPort,则默认hostPort等于containerPort,如果制定了hostPort,则hostPort必须等于containerPort的值。

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  hostNetwork: true
  containers:
  - name: webapp
    image: tomcat
    ports:
    - containerPort: 8080 # 通过物理机的IP地址和8080端口访问Pod的tomcat服务
将Service的端口号映射到物理机

(1) 通过设置nodePort映射到物理机,同时设置Service的类型为NodePort:

apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  type: NodePort
  ports:
  - port: 8080 # service 所需的端口号
    targetPort: 8080 # 后端pod的端口号
    nodePort: 8081  # 与service端口号映射的物理节点的端口号,通过物理机的IP地址和8081端口访问Pod的tomcat服务
    selector:
      app: webapp

(2) 通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种方法仅用于在公有云服务提供商的云平台上设置Service的场景。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targerPort: 9376
    nodePort: 30001
  clusterIP: 10.0.171.239
  loadBalancerIP: 78.11.24.19
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 146.148.47.155 # 云服务商提供的负载均衡器的IP地址
发布了11 篇原创文章 · 获赞 1 · 访问量 2211

猜你喜欢

转载自blog.csdn.net/weixin_42450836/article/details/100010944