gcloud上的Kubernetes内部负载均衡器
我可能在这里问了一个错误的问题,但我正在尝试创建一个这样的内部负载平衡器gcloud上的Kubernetes内部负载均衡器,kubernetes,gcloud,internal-load-balancer,Kubernetes,Gcloud,Internal Load Balancer,我可能在这里问了一个错误的问题,但我正在尝试创建一个这样的内部负载平衡器 apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: service: gateway-service-name name: gateway-service-name spec: ports: - name: "80" port: 80 nodePort: 80 protocol: T
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
service: gateway-service-name
name: gateway-service-name
spec:
ports:
- name: "80"
port: 80
nodePort: 80
protocol: TCP
targetPort: 80
selector:
service: gateway-service-name
type: NodePort
externalName: gateway-service-name
我有一个可以通过http://[API\u service\u name]:3000访问的API服务,还有一个简单的nginx网关服务,代理通过http://[gateway\u service\u name]:80到http://[API\u service\u name]:3000
我的API service.yaml文件是
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
service: api-service-name
name: api-service-name
spec:
ports:
- name: "3000"
port: 3000
targetPort: 3000
selector:
service: api-service-name
status:
loadBalancer: {}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
name: api-service-name
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
service: api-service-name
spec:
containers:
- env:
...
image: ...
name: api-service-name
ports:
- containerPort: 3000
resources: {}
restartPolicy: Always
status: {}
我的API service deployment.yaml文件是
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
service: api-service-name
name: api-service-name
spec:
ports:
- name: "3000"
port: 3000
targetPort: 3000
selector:
service: api-service-name
status:
loadBalancer: {}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
name: api-service-name
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
service: api-service-name
spec:
containers:
- env:
...
image: ...
name: api-service-name
ports:
- containerPort: 3000
resources: {}
restartPolicy: Always
status: {}
而我的nginx service.yaml是
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
service: gateway-service-name
name: gateway-service-name
spec:
ports:
- name: "80"
port: 80
protocol: TCP
targetPort: 80
selector:
service: gateway-service-name
type: LoadBalancer
externalName: gateway-service-name
status:
loadBalancer: {}
而部署.yaml是
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
name: gateway-service-name
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
service: gateway-service-name
spec:
containers:
- image: ...
name: gateway-service-name
ports:
- containerPort: 80
resources: {}
restartPolicy: Always
status: {}
这些设置适用于外部负载平衡器/网关。当我执行kubectl get svc
时,它会打印
NAME CLUSTER-IP EXTERNAL-IP
gateway-service-name gateway.int.ip.add.ress gateway.ext.ip.add.ress
api-service-name api.int.ip.add.ress <none>
NAME CLUSTER-IP EXTERNAL-IP
网关服务名称gateway.int.ip.add.ress gateway.ext.ip.add.ress
api服务名称api.int.ip.add.ress
我可以浏览http://gateway.ext.ip.add.ress/any_available_endpoints
很好
我正在试图弄清楚我是否可以实现同样的目标,而不必为我的网关提供外部ip地址,并使用http://gateway.int.ip.add.ress/any_available_endpoints
我尝试使用默认的ClusterIp
ServiceType
,但它不起作用
注意:我将通过vpn访问网络,位于另一个集群上的另一个服务将在内部访问该网络
更新:我最终将我的客户端(web)放在同一个集群中,这样我的网关就不必有外部ip地址,我不确定这是否是正确的方法,但现在将保持这种方式A
ClusterIP
服务
只能从同一集群中的其他服务访问,因此如果您的服务在ClusterA中,而您的VPN在ClusterB中,则VPN将无法作为ClusterIP
服务
到达它
一个选项是继续将公共IP与负载平衡器服务一起使用,并配置防火墙,使用服务上的负载平衡器SourceRanges
设置,将流量限制为仅来自您的VPN()
如果ClusterA和ClusterB都在同一个网络上(这是新群集的默认设置),另一个选项是对服务使用类型:NodePort
。这将在ClusterA中每个节点的静态端口上公开服务,而不打开默认防火墙中的任何端口
如果ClusterA具有IP为10.128.0.2、10.128.0.3和10.128.0.4的节点,并且您可以这样配置服务
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
service: gateway-service-name
name: gateway-service-name
spec:
ports:
- name: "80"
port: 80
nodePort: 80
protocol: TCP
targetPort: 80
selector:
service: gateway-service-name
type: NodePort
externalName: gateway-service-name
然后您应该可以通过http://10.128.0.2/any_available_endpoints
或http://10.128.0.3/any_available_endpoints
或http://10.128.0.4/any_available_endpoints
我使用您的建议进行了快速尝试,但出现了此错误spec.port[0].nodePort:无效值:80:提供的端口不在有效范围内。有效端口的范围是30000-32767
,我在谷歌上搜索了一下,遇到了一个我认为不应该静态设置以避免冲突的问题?节点ip是指我的服务集群ip还是我的pods ip?因此,我尝试删除nodePort
并应用更改,然后我尝试了两个ip,但仍然不起作用。我最终将我的客户端放在同一个集群中,这样我的网关就不必有外部ip地址,我不确定这是否是正确的方法,但现在将保持这样