k8s创建service,令外部端口访问

一、pod IP
  1. 每个pod 都有自己的 IP 地址,存在于 pod scope。 当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址。
  2. 一个Pod 的 容器们containers 共享 networknamespaces, 包括IP 地址。这意味着在一个pod 里的容器们能够通过 localhost  访问彼此的端口。
 
二、service的三种端口
  Service 从逻辑上代表了一组 Pod,具体是哪些 Pod 则是由 label 来挑选。Service 有自己 IP,而且这个 IP 是不变的。
  1. port是 service暴露在cluster ip上的端口,:port 是提供给集群 内部 客户访问service的入口。
  2. nodePort 是k8s提供给集群外部客户访问service入口的一种方式,:nodePort 是提供给集群 外部 客户访问service的入口。
  3. targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上 进入容器
  4. port、nodePort总结: port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。
 
三、如何部署服务
参考 https://blog.csdn.net/u010955999/article/details/79448557
  1. 创建自己的对象(可能是部署deployment、ReplicationController、FrameworkController等),可以设定副本数
  2. 创建Service对象,作为入口地址来对上一步创建好的对象进行访问。将三种端口关联起来了。
apiVersion: v1
 
kind: Service
metadata:
  name: myweb
spec:
  ports:
  - name: myweb-svc //端口名称,Service是必须指定端口名称的
    port: 8080 //Service的端口号
    targetPort: 8080 //容器暴露的端口号
    nodePort: 31111 //node的真实端口号
  selector:
     app: myweb //Service选择了标签为app: myweb的pod,因此第一步创建的pod要与此处一样
   type: NodePort
把上述配置写进myweb-svc.yaml文件,通过kubectl create -f  myweb-svc.yaml 创建service对象
四、访问服务
  1. 集群内部访问服务
$  kubectl get svc | grep myweb
或$ kubectl describe svc myweb 查看clusterIP+port
然后$ telnet clusterIP port
      2. 集群外部访问服务
选择副本中的一个pod,$  kubectl get pods | grep myweb
然后 $ kubectl describe pod 查看node ip
node ip + :nodePort在外部访问服务
 

你可能感兴趣的:(平台开发)