将ClusterIP类型改为NodePort类型的一种方式

本文详细介绍了如何在Kubernetes中将服务类型从ClusterIP转换为NodePort,通过具体步骤展示了编辑和更新nginx-deployment服务的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取svc,查看nginx-deployment为ClusterIP类型

[root@k8s-master01 ~]# kubectl get svc
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP     4d20h
nginx-deployment   ClusterIP   10.105.22.208   <none>        30000/TCP   2m17s

执行命令进行编辑
kubectl edit svc nginx-deployment

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2020-02-14T12:42:32Z"
  labels:
    run: nginx-deployment
  name: nginx-deployment
  namespace: default
  resourceVersion: "312024"
  selfLink: /api/v1/namespaces/default/services/nginx-deployment
  uid: 77d51706-89eb-481c-918b-66b5fc8712fd
spec:
  clusterIP: 10.105.22.208
  ports:
  - port: 30000
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx-deployment
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

type: ClusterIP 修改为 type: NodePort,然后保存退出
然后获取svc,此时nginx-deployment是NodePort类型了


[root@k8s-master01 ~]# kubectl get svc
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP           4d20h
nginx-deployment   NodePort    10.105.22.208   <none>        30000:31868/TCP   8m49s
在 Kubernetes 中,如果你将 Ingress Controller 的 Service 类型从 `NodePort` 修改为 `ClusterIP`,那么这个 Service 将只能在集群内部访问,无法从集群外部通过域名直接访问。以下是详细解释: 1. **Service 类型的区别**: - **ClusterIP**:这种类型的 Service 只在集群内部可以访问,分配一个内部 IP 地址,用于集群内部的通信和服务发现。 - **NodePort**:这种类型的 Service 会在每个节点上分配一个端口,通过节点的 IP 和这个端口可以从集群外部访问服务。 2. **Ingress Controller 的作用**: - Ingress Controller 是 Kubernetes 的一种资源,用于管理外部流量如何进入集群并路由到相应的 Service。 - 通常情况下,Ingress Controller 需要一个对外暴露的 Service(通常是 `NodePort` 或 `LoadBalancer`)来接收外部流量。 3. **使用场景**: - 如果 Ingress Controller 的 Service 被设置为 `ClusterIP`,那么它只能接收来自集群内部的流量。 - 要从集群外部访问 Ingress Controller,需要确保它的 Service 类型是 `NodePort` 或 `LoadBalancer`。 4. **域名访问**: - 域名访问通常依赖于 DNS 解析,指向一个可以被外部访问的 IP 地址(如节点 IP 或负载均衡器的 IP)。 - 如果 Ingress Controller 的 Service 是 `ClusterIP`,则没有外部可访问的 IP 地址,因此域名无法解析到该 Service。 5. **解决方案**: - 如果需要从集群外部通过域名访问 Ingress Controller,建议保持其 Service 类型为 `NodePort` 或 `LoadBalancer`。 - 确保 DNS 设置正确,指向 Ingress Controller 的外部可访问 IP 地址。 6. **配置示例**: - 对于 `NodePort` 类型的 Service,配置文件可能如下所示: ```yaml apiVersion: v1 kind: Service metadata: name: ingress-nginx namespace: ingress-nginx spec: type: NodePort selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ports: - name: http port: 80 targetPort: 80 nodePort: 30080 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值