Kubernetes,k8s 如何制作服务 url?



我正在学习k8s。我的问题是,如何让 k8s 获取服务 url 作为 minikube 命令"minikube get service xxx --url"做什么? 我为什么问是因为当 pod 关闭并再次启动/创建/启动时,无需通过访问服务 url 来更改 url。而 我将 pod 部署为 NodePort,我可以使用主机 IP 和端口访问 pod,但如果再次重新启动/创建它,端口会发生变化。

我的情况如下所示:我有

one master(172.16.100.91) and 
one node(hostname node3, 172.16.100.96) 

我创建如下 pod 和服务,helllocomm 部署为 NodePort,helloext 部署为 ClusterIP。 Hellocomm 和 helloext 都是 春季启动 你好世界应用程序。

docker build -t jshenmaster2/hellocomm:0.0.2 .
kubectl run hellocomm --image=jshenmaster2/hellocomm:0.0.2 --port=8080
kubectl expose deployment hellocomm --type NodePort
docker build -t jshenmaster2/helloext:0.0.1 .
kubectl run helloext --image=jshenmaster2/helloext:0.0.1 --port=8080
kubectl expose deployment helloext --type ClusterIP

[root@master2 shell]# kubectl get service -o wide
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE       SELECTOR
hellocomm    NodePort    10.108.175.143   <none>        8080:31666/TCP   8s        run=hellocomm
helloext     ClusterIP   10.102.5.44      <none>        8080/TCP         2m        run=helloext
[root@master2 hello]# kubectl get pods -o wide
NAME                         READY     STATUS    RESTARTS   AGE       IP              NODE
hellocomm-54584f59c5-7nxp4   1/1       Running   0          18m       192.168.136.2   node3
helloext-c455859cc-5zz4s     1/1       Running   0          21m       192.168.136.1   node3

在上面,我的 pod 部署在 node3(172.16.100.96(,所以我可以通过 172.16.100.96:31666/hello 访问 hellocomm, 在这种情况下,人们可以很容易地看到,当node3关闭时,创建一个新的pod,端口也会改变。 这样我的客户端就失去了连接。我不想要这个解决方案。

我目前的问题是,由于helloext部署为ClusteriP,它也是如上所示的服务。 这是否意味着集群IP 10.102.5.44 和端口 8080 将是服务 URL,http://10.102.5.44:8080/hello?

我需要再次通过 yaml 文件创建服务吗?与通过 yaml 文件针对命令创建的服务有什么区别?怎么写 遵循 yaml 文件,如果我必须通过 YAML 创建服务?

下面是我需要填写的yaml定义模板,如何填写?

apiVersion: v1
kind: Service
matadata:
name: string         helloext      
namespace: string    default
labels:              
- name: string     helloext
annotations:
- name: string     hello world   
spec:
selector: []            ?
type: string            ?
clusterIP: string       anything I could give?  
sessionAffinity: string  ? (yes or no) 
ports:
- name: string          helloext  
protocol: string      tcp  
port: int             8081? (port used by host machine)
targetPort: int       8080? (spring boot uses 8080)
nodePort: int         ? 
status:                 since I am not using loadBalancer in deploymennt, I could forget this.  
loadBalancer:
ingress:
ip: string
hostname: string

顾名思义,NodePort 直接在节点上(实际上是在群集中的所有节点上(打开一个端口,以便您可以访问您的服务。默认情况下,它是随机的 - 这就是为什么当一个 pod 死亡时,它会为你生成一个新的。但是,您也可以指定端口(此处为第 3 段( - 即使在重新创建 pod 后,您也可以在同一端口上访问。

群集 IP 只能在群集内访问,因为它是专用 IP。这意味着,在默认情况下,您可以从群集内的另一个容器/节点访问此服务。您可以将exec/ssh到任何正在运行的容器/节点中并尝试一下。

Yaml 文件可以进行版本控制、记录、模板化(Helm(等。

查看 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#servicespec-v1-core 以获取每个字段的详细信息。

编辑: 有关服务的更多详细信息,请访问:https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

如何创建一个入口并将其指向服务以在群集外部访问它?

相关内容

  • 没有找到相关文章

最新更新