k8s(4)-使用服务公开应用程序

 

    Kubernetes中的服务是一个抽象,它定义了一组逻辑Pod和一个访问它们的策略。服务允许从属Pod之间的松散耦合。与所有Kubernetes对象一样,使用YAML (首选)或JSON 定义服务服务所针对的Pod集合通常由LabelSelector确定

尽管每个Pod都具有唯一的IP地址,但如果没有服务,这些IP不会在群集外部公开。服务允许您的应用程序接收流量。通过type在ServiceSpec中指定a 可以以不同方式公开服务:

  • ClusterIP(默认) - 在群集中的内部IP上公开服务。此类型使服务只能从群集中访问。
  • NodePort - 使用NAT在集群中每个选定节点的同一端口上公开服务。使用可从群集外部访问服务<NodeIP>:<NodePort>ClusterIP的超集。
  • LoadBalancer - 在当前云中创建外部负载均衡器(如果支持),并为服务分配固定的外部IP。NodePort的超集。
  • ExternalName - externalName通过返回带有名称的CNAME记录,使用任意名称(在规范中指定公开服务没有代理使用。此类型需要v1.7或更高版本kube-dns

 

1. 查看现有的部署
1
2
3
[root@master ~]# kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           4h12m

  

2. 通过expose命令和NodePort参数创建一个新服务
1
2
[root@master ~]# kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed

  

3. 查看创建的服务
1
2
3
4
[root@master ~]# kubectl get service
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.96.0.1       <none>        443/TCP          2d12h
kubernetes-bootcamp   NodePort    10.98.200.115   <none>        8080:31238/TCP   16s

 

查看详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@master ~]# kubectl get service
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.96.0.1       <none>        443/TCP          2d13h
kubernetes-bootcamp   NodePort    10.98.200.115   <none>        8080:31238/TCP   12m
[root@master ~]# kubectl describe  service/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   run=kubernetes-bootcamp
Annotations:              <none>
Selector:                 run=kubernetes-bootcamp
Type:                     NodePort
IP:                       10.98.200.115
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31238/TCP
Endpoints:                10.244.0.15:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
  •   8080: Pod的端口
  •        31238: NodePort,对集群外部公开
  •        Endpoints: Pod的IP+端口

   

4.  打印NodePod
1
2
3
[root@master ~]# export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
[root@master ~]# echo NODE_PORT=$NODE_PORT
NODE_PORT=31238

  

   5. 访问服务
1
2
[root@master ~]# curl http://192.168.0.10:31238
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7f56b875dc-6zbjt | v=1

  

6. 为Pod创建标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@master ~]# export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')<br>
[root@master ~]# echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-7f56b875dc-6zbjt<br>
[root@master ~]# kubectl label pod $POD_NAME app=v1
pod/kubernetes-bootcamp-7f56b875dc-6zbjt labeled<br>
[root@master ~]# kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-7f56b875dc-6zbjt   1/1     Running   0          4h52m<br>
[root@master ~]# kubectl describe  pods
Name:               kubernetes-bootcamp-7f56b875dc-6zbjt
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               master/192.168.0.10
Start Time:         Fri, 25 Jan 2019 09:55:50 +0800
Labels:             app=v1

  

7. 通过标签查找Pod
1
2
3
[root@master ~]# kubectl get pods -l app=v1
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-7f56b875dc-6zbjt   1/1     Running   0          4h55m

  

8. 通过标签删除服务
1
kubectl delete service -l run=kubernetes-bootcamp

  

 

posted @   头痛不头痛  阅读(619)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2016-01-25 Websphere停止服务不用输入账号密码
点击右上角即可分享
微信分享提示
主题色彩