这是我理解相关流程的方式:
但是我的容器公开了一个不同的端口,比如说 3000。
如何在步骤 2 或 3 中进行像 80:3000 这样的端口映射?
有一些令人困惑的选项,例如
targetport
和 hostport
在对我没有帮助的 kubernetes 文档中。 kubectl port-forward
似乎只将我的本地(开发)机器的端口转发到特定的 pod 进行调试。这些是我用于在谷歌云中设置服务的命令:
kubectl run test-app --image=eu.gcr.io/myproject/my_app --port=80
kubectl expose deployment test-app --type="LoadBalancer"
最佳答案
我发现我需要在我的第二个命令中添加一些参数:
kubectl expose deployment test-app --type="LoadBalancer" --target-port=3000 --port=80
这将创建一个服务,将传入的 http 流量(在端口 80 上)定向到端口 3000 上的 pod。
一个更好的方法是使用 yaml 文件
service.yaml
和 deployment.yaml
并打电话kubectl create -f deployment.yaml
kubectl create -f service.yaml
文件包含这些内容的地方
# deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: test-app
spec:
containers:
- name: user-app
image: eu.gcr.io/myproject/my_app
ports:
- containerPort: 3000
和
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: test-app
ports:
- port: 80
targetPort: 3000
type: LoadBalancer
请注意,服务的选择器必须与部署的标签相匹配。
关于kubernetes - 将 kubernetes 服务中的传入端口映射到 docker 容器上的不同端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39484653/