【问题标题】:single service with multiple exposed ports on a pod with multiple containers在具有多个容器的 pod 上具有多个暴露端口的单个服务
【发布时间】:2019-09-19 22:48:21
【问题描述】:

我已经让多个容器在同一个 pod 中工作。

 kubectl apply  -f myymlpod.yml

kubectl expose pod mypod --name=myname-pod --port 8855 --type=NodePort

然后我就可以测试“暴露”了

minikube service list

..

|-------------|-------------------------|-----------------------------|
|  NAMESPACE  |          NAME           |             URL             |
|-------------|-------------------------|-----------------------------|
| default     | kubernetes              | No node port                |
| default     | myname-pod              | http://192.168.99.100:30036 |
| kube-system | kube-dns                | No node port                |
| kube-system | kubernetes-dashboard    | No node port                |
|-------------|-------------------------|-----------------------------|

现在,我的 myymlpod.yml 中有多个容器。 一个容器在 8855 上运行一个服务,一个在 8877 上运行。

下面的文章~提示~我需要做什么。

https://www.mirantis.com/blog/multi-container-pods-and-container-communication-in-kubernetes/

在一个 Pod 中暴露多个容器

虽然这个例子展示了如何 使用单个容器访问 pod 中的其他容器,它是 一个 Pod 中的多个容器监听不同的容器是很常见的 端口——所有这些都需要公开。为了实现这一点,您可以 要么创建具有多个公开端口的单个服务,要么您可以 为您尝试公开的每个部分创建一个服务。

“创建具有多个暴露端口的单个服务”

我找不到任何关于如何实际执行此操作的信息,公开多个端口。

如何在单个服务上公开多个端口?

谢谢。

追加:

K8Containers.yml(下)

apiVersion: v1
kind: Pod
metadata:
  name: mypodkindmetadataname
  labels:
    example: mylabelname

spec:

  containers:

  - name: containername-springbootfrontend
    image: mydocker.com/webfrontendspringboot:latest 
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "612Mi"
        cpu: "400m"
    ports:
      - containerPort: 8877


  - name: containername-businessservicesspringboot
    image: mydocker.com/businessservicesspringboot:latest
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "613Mi"
        cpu: "400m" 
    ports:
      - containerPort: 8855

kubectl apply  -f K8containers.yml
pod "mypodkindmetadataname" created

kubectl get pods
NAME                    READY     STATUS    RESTARTS   AGE
mypodkindmetadataname   2/2       Running   0          11s

k8services.yml(下)

apiVersion: v1
kind: Service
metadata: 
  name: myymlservice
  labels: 
    name: myservicemetadatalabel
spec: 
  type: NodePort
  ports:
  - name: myrestservice-servicekind-port-name
    port: 8857
    targetPort: 8855
  - name: myfrontend-servicekind-port-name
    port: 8879
    targetPort: 8877
  selector: 
    name: mypodkindmetadataname

........

kubectl apply  -f K8services.yml
service "myymlservice" created

........

 minikube service myymlservice --url
http://192.168.99.100:30784
http://192.168.99.100:31751

........

 kubectl describe service myymlservice


Name:                     myymlservice
Namespace:                default
Labels:                   name=myservicemetadatalabel
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"name":"myservicemetadatalabel"},"name":"myymlservice","namespace":"default"...
Selector:                 name=mypodkindmetadataname
Type:                     NodePort
IP:                       10.107.75.205
Port:                     myrestservice-servicekind-port-name  8857/TCP
TargetPort:               8855/TCP
NodePort:                 myrestservice-servicekind-port-name  30784/TCP
Endpoints:                <none>
Port:                     myfrontend-servicekind-port-name  8879/TCP
TargetPort:               8877/TCP
NodePort:                 myfrontend-servicekind-port-name  31751/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

....

不幸的是,当我尝试调用“暴露”的项目时它仍然无法正常工作。

打电话

http://192.168.99.100:30784/myrestmethod

没用

打电话

http://192.168.99.100:31751

http://192.168.99.100:31751/index.html

没用

任何人都知道我错过了什么。

追加(正在工作)

选择器与“名称”不匹配,它与标签匹配。

k8containers.yml(部分在顶部)

apiVersion: v1
kind: Pod
metadata:
  name: mypodkindmetadataname
  labels:
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

spec:

  containers:

  # Main application container
  - name: containername-springbootfrontend
    image: mydocker.com/webfrontendspringboot:latest 
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "612Mi"
        cpu: "400m"
    ports:
      - containerPort: 8877


  - name: containername-businessservicesspringboot
    image: mydocker.com/businessservicesspringboot:latest
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "613Mi"
        cpu: "400m" 
    ports:
      - containerPort: 8855

k8services.yml

apiVersion: v1
kind: Service
metadata: 
  name: myymlservice
  labels: 
    name: myservicemetadatalabel
spec: 
  type: NodePort
  ports:
  - name: myrestservice-servicekind-port-name
    port: 8857
    targetPort: 8855
  - name: myfrontend-servicekind-port-name
    port: 8879
    targetPort: 8877
  selector: 
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

【问题讨论】:

    标签: docker kubernetes kubernetes-pod


    【解决方案1】:

    是的,您可以创建一个打开多个端口或服务端口连接指向容器端口的单一服务。

    kind: Service
    apiVersion: v1
    metadata:
      name: mymlservice
    spec:
      selector:
        app: mymlapp
      ports:
      - name: servicename-1
        port: 4444
        targetPort: 8855
      - name: servicename-2
        port: 80
        targetPort: 8877
    

    目标端口连接到您的容器端口。

    【讨论】:

    • 我是否将它与我现有的 myymlpod.yml 文件“混合”,或者我是否为此部件创建一个新的 yml 文件? (注意,我也在我的问题中添加了示例 myymlpod.yml)
    • 最好创建新的 yaml 文件,这样就不会出现混淆。一个用于服务,一个用于 pod 配置
    • 我接受了你的建议。并用完整的图片更新了我的问题。我仍然没有接到上班的电话(如果你有机会看看的话)。谢谢...
    • 这个答案并不完整,但它确实让我得到了最终的答案,因此我接受了“答案”。有关完整答案,请参阅我的原始问题和“追加(现在工作)”区域。感谢 Harsh 推动我前进!
    • 谢谢。选择器的东西第一次通过就很棘手!我的原始示例(来自某个网​​站)对名称和标签使用了相同的字符串值,因此花了我一段时间。我讨厌示例中的值/标签模棱两可。在这里再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2021-08-15
    • 2016-11-14
    • 1970-01-01
    • 2020-10-15
    • 2019-02-17
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多