Kubernete Service 是一个定义了一组Pod的策略的抽象,咱们也有时候叫作宏观服务。这些被服务标记的Pod都是(通常)经过label Selector决定的node
对于Kubernete原生的应用,Kubernete提供了一个简单的Endpoints API,这个Endpoints api的做用就是当一个服务中的pod发生变化时,Endpoints API随之变化,对于哪些不是原生的程序,Kubernetes提供了一个基于虚拟IP的网桥的服务,这个服务会将请求转发到对应的后台podnginx
第一步:编写部署nginx-svc的yml文件web
╭─root@node1 ~ ╰─➤ vim nginx-svc.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx1 spec: replicas: 2 template: metadata: labels: name: web # 标签 service spec: containers: - name: nginx image: nginx ports: - containerPort: 80 # 暴露在pod的ip上的端口 --- apiVersion: v1 kind: Service metadata: name: my-svc spec: selector: name: web # 标签 labels ports: - port: 80 # service暴露的端口 targetPort: 80 # pods的端口
第二步:运行yml文件vim
╭─root@node1 ~ ╰─➤ kubectl apply -f nginx-svc.yml
第三步:查看标签api
╭─root@node1 ~ ╰─➤ kubectl get po -o wide --show-labels NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS nginx1-7f56c7b7f8-qxqbg 1/1 Running 0 2m33s 10.244.1.6 node2 <none> <none> name=web,pod-template-hash=7f56c7b7f8 nginx1-7f56c7b7f8-zjt9m 1/1 Running 0 2m33s 10.244.2.11 node3 <none> <none> name=web,pod-template-hash=7f56c7b7f8
查看namespaceapp
╭─root@node1 ~ ╰─➤ kubectl get namespace NAME STATUS AGE default Active 2d19h kube-node-lease Active 2d19h kube-public Active 2d19h kube-system Active 2d19h
编辑yml文件ide
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx1 namespace: kube-system # 指定namespace spec: replicas: 2 template: metadata: labels: name: web spec: containers: - name: nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-svc namespace: kube-system # 指定namespace spec: selector: name: web ports: - port: 80
其中:spa
第一步:修改yml文件code
kind: Deployment metadata: name: nginx1 spec: replicas: 2 template: metadata: labels: name: web spec: containers: - name: nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-svc spec: type: NodePort # 选择service端口暴露方式 selector: name: web ports: - port: 80 targetPort: 80 nodePort: 30007 # 端口选择范围 30000-32767
第二步:执行yml文件blog
╭─root@node1 ~ ╰─➤ kubectl apply -f nginx-svc.yml
第三步:查看svc
╭─root@node1 ~ ╰─➤ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d19h my-svc NodePort 10.109.183.148 <none> 80:30007/TCP 9s
第四步:查看主机端口
╭─root@node1 ~ ╰─➤ ss -ntl |grep 30007 LISTEN 0 128 :::30007 :::*
service暴露端口的四种方式:
- clusterIP
- NodePort
- LoadBalance
- ExternalName