具有规范类型 ClusterIP 和规范类型 Nodeport 的 Kubernetes 服务
Kubernetes services with spec type ClusterIP and spec type Nodeport
我正在尝试创建一个服务,其中 pods 通过具有 spec type: ClusterIP
的服务建立连接,现在我想使用 [=15] 将此应用程序公开到我的浏览器=] 但是我无法将类型 NodePort 添加到现有的 service.yaml。如何在同一服务中为同一应用程序指定第二个规格?
app1-->连接到 app2(db 通过 ClusterIP:端口 1521)
app1-->暴露给入口以从我的浏览器访问它
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"partner-service","namespace":"default"},"spec":{"ports":[{"port":1521,"protocol":"TCP","targetPort":1521}]}}
creationTimestamp: "2021-03-08T14:32:02Z"
labels:
app: partner-db
name: partner-service
namespace: default
resourceVersion: "12574"
uid: b5106bef-a292-4a16-aafc-9676a81cd763
spec:
clusterIP: 10.96.122.33
clusterIPs:
- 10.96.122.33
ports:
- port: 1521
protocol: TCP
targetPort: 1521
selector:
app: partner-db
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
这会引发需要 ClusterIp 的错误。是否可以在同一个服务中有两种类型的连接?
我也试过k expose deployment partner-as --type=NodePort --ports=8080
但是错误服务已经存在
这在安装了 minikube 的 vagrant VM 上运行
根据评论添加了第二项服务。
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2021-03-09T09:28:00Z"
labels:
app: partner-as
name: service-as
namespace: default
resourceVersion: "16889"
uid: bed7ab44-c350-45e6-87c4-8aac037740c3
spec:
clusterIP: 10.104.102.177
clusterIPs:
- 10.104.102.177
externalTrafficPolicy: Cluster
ports:
- nodePort: 30029
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: partner-as
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
和我的ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-as
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: partner.info
http:
paths:
- path: /partner
pathType: Prefix
backend:
service:
name: service-as
port:
number: 8080
在 vagrant 虚拟机的 etc 主机中添加 partner.info。
仍然无法从 ym 本地计算机访问 IP。(因此无法从 brwoser 访问)
将我的服务描述为
Name: service-as
Namespace: default
Labels: app=partner-as
Annotations: <none>
Selector: app=partner-as
Type: NodePort
IP Families: <none>
IP: 10.104.102.177
IPs: 10.104.102.177
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30029/TCP
Endpoints: 172.17.0.5:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
您不能定义类型为 ClusterIP
和 NodePort
的服务。
您需要删除 ClusterIP
类型的旧服务并创建 NodePort
类型的新服务。
请记住在 Service
规范中保留 selector
标签,以便新服务正确地将流量路由到正确的 pods 集。
您可以使用不同的名称创建两个服务,但保持相同的选择器
对于单个服务,您不能应用多个类型。 ClusterIP
或 NodePort
你只能使用 一个
在一个文件中你可以做的是
service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: partner-db
name: partner-service
namespace: default
spec:
ports:
- port: 1521
protocol: TCP
targetPort: 1521
selector:
app: partner-db
sessionAffinity: None
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: partner-db
name: partner-service-node-port
namespace: default
spec:
ports:
- port: 1521
protocol: TCP
targetPort: 1521
selector:
app: partner-db
type: NodePort
对于内部使用,您可以使用集群 IP,但如果您希望使用 Domain 使用或公开服务,我建议您使用入口。
为此
app1-->connects to app2(db via ClusterIP: port 1521) app1-->expose to
ingress to access it from my browser
如果您正在使用入口,您可以将两种服务类型都用作 ClusterIP
,因为您希望通过浏览器访问您的 app1。
我正在尝试创建一个服务,其中 pods 通过具有 spec type: ClusterIP
的服务建立连接,现在我想使用 [=15] 将此应用程序公开到我的浏览器=] 但是我无法将类型 NodePort 添加到现有的 service.yaml。如何在同一服务中为同一应用程序指定第二个规格?
app1-->连接到 app2(db 通过 ClusterIP:端口 1521) app1-->暴露给入口以从我的浏览器访问它
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"partner-service","namespace":"default"},"spec":{"ports":[{"port":1521,"protocol":"TCP","targetPort":1521}]}}
creationTimestamp: "2021-03-08T14:32:02Z"
labels:
app: partner-db
name: partner-service
namespace: default
resourceVersion: "12574"
uid: b5106bef-a292-4a16-aafc-9676a81cd763
spec:
clusterIP: 10.96.122.33
clusterIPs:
- 10.96.122.33
ports:
- port: 1521
protocol: TCP
targetPort: 1521
selector:
app: partner-db
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
这会引发需要 ClusterIp 的错误。是否可以在同一个服务中有两种类型的连接?
我也试过k expose deployment partner-as --type=NodePort --ports=8080
但是错误服务已经存在
这在安装了 minikube 的 vagrant VM 上运行
根据评论添加了第二项服务。
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2021-03-09T09:28:00Z"
labels:
app: partner-as
name: service-as
namespace: default
resourceVersion: "16889"
uid: bed7ab44-c350-45e6-87c4-8aac037740c3
spec:
clusterIP: 10.104.102.177
clusterIPs:
- 10.104.102.177
externalTrafficPolicy: Cluster
ports:
- nodePort: 30029
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: partner-as
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
和我的ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-as
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: partner.info
http:
paths:
- path: /partner
pathType: Prefix
backend:
service:
name: service-as
port:
number: 8080
在 vagrant 虚拟机的 etc 主机中添加 partner.info。
仍然无法从 ym 本地计算机访问 IP。(因此无法从 brwoser 访问)
将我的服务描述为
Name: service-as
Namespace: default
Labels: app=partner-as
Annotations: <none>
Selector: app=partner-as
Type: NodePort
IP Families: <none>
IP: 10.104.102.177
IPs: 10.104.102.177
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30029/TCP
Endpoints: 172.17.0.5:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
您不能定义类型为 ClusterIP
和 NodePort
的服务。
您需要删除 ClusterIP
类型的旧服务并创建 NodePort
类型的新服务。
请记住在 Service
规范中保留 selector
标签,以便新服务正确地将流量路由到正确的 pods 集。
您可以使用不同的名称创建两个服务,但保持相同的选择器
对于单个服务,您不能应用多个类型。 ClusterIP
或 NodePort
你只能使用 一个
在一个文件中你可以做的是
service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: partner-db
name: partner-service
namespace: default
spec:
ports:
- port: 1521
protocol: TCP
targetPort: 1521
selector:
app: partner-db
sessionAffinity: None
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: partner-db
name: partner-service-node-port
namespace: default
spec:
ports:
- port: 1521
protocol: TCP
targetPort: 1521
selector:
app: partner-db
type: NodePort
对于内部使用,您可以使用集群 IP,但如果您希望使用 Domain 使用或公开服务,我建议您使用入口。
为此
app1-->connects to app2(db via ClusterIP: port 1521) app1-->expose to ingress to access it from my browser
如果您正在使用入口,您可以将两种服务类型都用作 ClusterIP
,因为您希望通过浏览器访问您的 app1。