Kubernetes --(k8s) service

service

Kubernete Service 是一个定义了一组Pod的策略的抽象,我们也有时候叫做宏观服务。这些被服务标记的Pod都是(一般)通过label Selector决定的

对于Kubernete原生的应用,Kubernete提供了一个简单的Endpoints API,这个Endpoints api的作用就是当一个服务中的pod发生变化时,Endpoints API随之变化,对于哪些不是原生的程序,Kubernetes提供了一个基于虚拟IP的网桥的服务,这个服务会将请求转发到对应的后台pod

实验

第一步:编写部署nginx-svc的yml文件

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文件

kubectl apply -f nginx-svc.yml

第三步:查看标签

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 name=web,pod-template-hash=7f56c7b7f8
nginx1-7f56c7b7f8-zjt9m 1/1 Running 0 2m33s 10.244.2.11 node3 name=web,pod-template-hash=7f56c7b7f8

指定namespace

查看namespace

kubectl get namespace
NAME STATUS AGE
default Active 2d19h
kube-node-lease Active 2d19h
kube-public Active 2d19h
kube-system Active 2d19h

编辑yml文件

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

其中:

1.通过DNS名称访问,只能在同一名称空间
2.如果不是同一名称空间,需要指定namespace

外网访问

第一步:修改yml文件

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文件

kubectl apply -f nginx-svc.yml

第三步:查看svc

kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 2d19h
my-svc NodePort 10.109.183.148 80:30007/TCP 9s

第四步:查看主机端口

ss -ntl |grep 30007
LISTEN 0 128 :::30007 ::😗

service暴露端口的四种方式

clusterIP
NodePort
LoadBalance
ExternalName
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值