上一回我们使用 Pod 将应用程序部属到 Kubernetes 环境里,今天会介绍如何透过 Service 元件让应用程序可以从外部存取。
Service 是 Kubernetes 内部的基础元件,负责定义如何存取 Pod 规则。不管是内部的沟通,或者是外部的服务暴露,都会使用到 Service 来作为 Pod 的进入点。而根据使用状况,会使用到不同类型的 Service ,主要有以下三种。
ClusterIP 是 Service 的默认类型,使内部可以访问该服务,而外部则无法存取。通常会使用在如後端服务器这种只允许内部存取的应用。
NodePort 是一种对外服务的方式,会在所有节点上开放一个连接埠(预设是30000 ~ 32767),发送到该端口的流量就会被转发到对应服务。因为需要暴露主机位址才能使用,所以大多只用於测试或是 Demo。
LoadBalancer 会跟外部的 Load Balancer 服务搭配,是云端上暴露服务的标准方式。在 GKE 上使用会提供一个外部 IP ,透过此 IP 就能将流量转发到你的服务上。
就来试着建置 Service 元件,我们会建立一个类型为 LoadBalancer
的 Service,就可以透过 IP 存取服务。
进入 Cloud Shell 网站,点击终端机输入指令
列出所有的 project ,找到之前所创建专案的 PROJECT_ID
gcloud projects list
PROJECT_ID
,开启专案 Terminal建置元件的方式一样透过 yaml 档来定义。
myservice.yaml
档案cd ~/k8s-test && touch myservice.yaml
还记得上回 mypod.yaml
档案里设置的 Label,根据标签可将 Pod 做分群管理,Service 如何把流量导入到正确的 Pod 上,就是使用 Label Selector , 根据设定的标签来寻找到对应的 Pod。
mypod.yaml
档案里设置的 Label可以看到设置了一个Label app=myapp
,所以只要在 Service 的 Label Selector 也设定同样标签,就能成功将流量转发到此 Pod 上。
myservice.yaml
档案并贴上以下内容apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: myapp
apiVersion
kind
metadata
spec
ports
selector
myservice.yaml
建立元件kubectl apply -f myservice.yaml
kubectl get <type>
查看 Services 元件。kubectl get svc
(输出结果)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.3.240.1 <none> 443/TCP 24h
myservice LoadBalancer 10.3.253.46 <pending> 80:30254/TCP 5s
第一个为 kubernetes 内部的 Service 可以忽略。myservice
的EXTERNAL-IP
栏位显示是<pending>
,需要等待大约2-3分钟才能拿到IP。
kubectl get svc
(输出结果)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.3.240.1 <none> 443/TCP 24h
myservice LoadBalancer 10.3.253.46 34.150.28.184 80:30254/TCP 2m41s
有了外部IP,就能存取服务了。
http://<EXTERNAL-IP>
看到服务器回传讯息,代表可以存取到 Pod 了。
今天学习到了 Kubernetes 基本的网路元件 Service,有兴趣的话可以搜寻 Ingress、Service Mesh 等关键字,能够了解到更多 K8s 网路的解决方案。
>>: [FGL] 吸星大法 - IMPORT之 1: 使用extension扩展功能
研究了半天 写了一个自动注册帐户的程序 如下 首先会读取chromedriver 开启後转到注册页面...
BPMN (Business Process Model and Notation) 也是一个用来做...
该文章同步发布於:我的部落格 还记得我们使用 let 方法来实作一个物件来让我们可以快速使用! 但...
● 接下来几章都是先以模拟帐户作登入,尚未使用正式证券户帐户登入 如果尚未有永丰金证券帐户的朋友,但...
常常在社群里面看到从其他程序语言转来用Go会有的问题 这些是找到的资料跟总结 同步更新在github...