访问从Docker Compose转换而来的Kubernetes服务

时间:2019-05-09 18:17:15

标签: docker kubernetes docker-compose kompose

我使用Docker Compose构建了一个应用程序,其中包括一个Nginx实例,该实例在端口80上接受连接:

  nginx:
    image: nginx:1.15.12-alpine
    container_name: nginx
    volumes:
      - etc.
    ports:
      - 80:80

我想在本地计算机(macOS)上运行的Kubernetes上启动此应用程序。因此,我运行了kompose convertdocumented here

生成的nginx-service.yaml如下所示:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  ports:
  - name: "80"
    port: 80
    targetPort: 80
  selector:
    io.kompose.service: nginx
status:
  loadBalancer: {}

我用kubectl apply生成的所有YAML文件运行了kompose,然后运行了kubectl describe svc nginx

Name:              nginx
Namespace:         myproject
Labels:            io.kompose.service=nginx
Annotations:       kompose.cmd=kompose convert
                   kompose.version=1.18.0 ()
                   kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"kompose.cmd":"kompose convert","kompose.version":"1.18.0 ()"},"creationTimestamp":null,...
Selector:          io.kompose.service=nginx
Type:              ClusterIP
IP:                172.30.110.242
Port:              80  80/TCP
TargetPort:        80/TCP
Endpoints:         
Session Affinity:  None
Events:            <none>

但是,我无法通过导航到同一台计算机上的http://172.30.110.242:80来访问Web服务器。

accessing services running on clusters上有文档。我是k8s的新手,我不确定如何诊断问题并为它们列出的选项选择正确的解决方案。

kompose中没有生成可比的服务配置文件的缺陷吗?

2 个答案:

答案 0 :(得分:0)

请参阅:

https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport

您从本地计算机到K8世界的“连接到” URL将不是“ 172.x.x.x”。可能是192.168.99.100:33333(端口号可能会有所不同)。运行此命令:

minikube service myservicename -n "default" --url

看看能给你带来什么

但基本上,您需要将k8世界“暴露”于外界。

这个yml应该可以帮助

apiVersion: v1
kind: Service
metadata: 
  name: myservicename
  namespace: mycustomnamespace
  labels: 
    name: myservicemetadatalabel
spec: 
  type: NodePort
  ports:
  - name: myfirstportname
    port: 80
    targetPort: 80    
  selector: 
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

选择器将参考您的吊舱/容器设置。

apiVersion: v1
kind: Pod
metadata:
  name: myfirstpodmetadataname
  namespace: mycustomnamespace
  labels:
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

“选择器”不在此问题的范围内...但是以上内容将为您提供所需的面包屑

另请参阅:

How to expose k8 pods to the public internet?

答案 1 :(得分:0)

您将需要一个入口或Nodeport / Loadbalancer服务,以便可以从外部访问该服务。

您还可以尝试使用https://github.com/konveyor/move2kube来转换docker compose文件。

move2kube translate -s <folder containing docker compose file>

它将询问您您希望在外部公开哪些服务,并为您创建适当的入口Yaml。