这是我理解相关流程的方式:
然而,我的容器暴露了一个不同的端口,让我们说3000。 如何在步骤2或3中进行80:3000的端口映射?
kubernetes文档中有targetport
和hostport
等令人困惑的选项对我没有帮助。 kubectl port-forward
似乎只将我的本地(开发)计算机的端口转发到特定的pod进行调试。
这些是我用于在Google云中设置服务的命令:
kubectl run test-app --image=eu.gcr.io/myproject/my_app --port=80
kubectl expose deployment test-app --type="LoadBalancer"
答案 0 :(得分:6)
我发现我需要在第二个命令中添加一些参数:
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
请注意,服务的选择器必须与部署的标签匹配。