我部署了一堆服务,并且所有这些服务都存在同样的问题:定义的端口(例如80
和443
)无法访问,但无论如何都是自动分配的节点端口。 / p>
从第一个服务导出以下服务定义:
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "traefik",
"namespace": "kube-system",
"selfLink": "/api/v1/namespaces/kube-system/services/traefik",
"uid": "70df3a55-422c-11e8-b7c0-b827eb28c626",
"resourceVersion": "1531399",
"creationTimestamp": "2018-04-17T10:45:27Z",
"labels": {
"app": "traefik",
"chart": "traefik-1.28.1",
"heritage": "Tiller",
"release": "traefik"
}
},
"spec": {
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": "http",
"nodePort": 31822
},
{
"name": "https",
"protocol": "TCP",
"port": 443,
"targetPort": "httpn",
"nodePort": 32638
}
],
"selector": {
"app": "traefik",
"release": "traefik"
},
"clusterIP": "10.109.80.108",
"type": "LoadBalancer",
"sessionAffinity": "None",
"externalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
}
知道我如何使用http://node-ip-addr:80
以及http://node-ip-addr:443
的其他服务来使用此服务?
答案 0 :(得分:0)
您为服务定义的端口(在本例中为443和80--)只能从群集中访问。您可以尝试使用curl http://traefik.kube-system.svc.cluster.local或http://从另一个pod(例如,运行繁忙的框)中调用您的服务。
如果您想从群集外部访问您的服务(这是您的用例,您需要将您的服务公开为以下之一
您选择了NodePort,这意味着群集的每个节点都会侦听特定端口上的请求(在您的情况下为31822表示http,32638表示https),然后委托给您的服务。这就是http://node-ip-addr:31822适用于您提供的服务配置的原因。
要根据您的要求调整您的配置,您必须设置“nodePort”:80,它将在每个群集节点上保留端口80以委派给您的服务。这通常不是最好的主意。您希望将端口保持为当前定义的端口,并在群集前添加代理服务器或负载平衡器,然后侦听端口80并转发到其中一个节点,以便为您的服务端口31822。
有关发布服务的详细信息,请参阅Kubernetes docs
上的文档答案 1 :(得分:0)
检查以下工作示例。
注意:
containerPort
Deployment
Service
将容器端口4000(targetPort
)映射到port
80 Ingress
现在指向servicePort
80 apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: testui-deploy
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
app: testui
template:
metadata:
labels:
app: testui
spec:
containers:
- name: testui
image: gcr.io/test2018/testui:latest
ports:
- containerPort: 4000
---
apiVersion: v1
kind: Service
metadata:
name: testui-svc
labels:
app: testui-svc
spec:
type: NodePort
selector:
app: testui
ports:
- protocol: TCP
port: 80
targetPort: 4000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ing
annotations:
kubernetes.io/ingress.global-static-ip-name: test-ip
spec:
backend:
serviceName: testui-svc
servicePort: 80