我使用Docker Compose构建了一个应用程序,其中包括一个Nginx实例,该实例在端口80上接受连接:
nginx:
image: nginx:1.15.12-alpine
container_name: nginx
volumes:
- etc.
ports:
- 80:80
我想在本地计算机(macOS)上运行的Kubernetes上启动此应用程序。因此,我运行了kompose convert
,documented 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
中没有生成可比的服务配置文件的缺陷吗?
答案 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
“选择器”不在此问题的范围内...但是以上内容将为您提供所需的面包屑
另请参阅:
答案 1 :(得分:0)
您将需要一个入口或Nodeport / Loadbalancer服务,以便可以从外部访问该服务。
您还可以尝试使用https://github.com/konveyor/move2kube来转换docker compose文件。
move2kube translate -s <folder containing docker compose file>
它将询问您您希望在外部公开哪些服务,并为您创建适当的入口Yaml。