k8s 的nodeport

本文详细介绍了如何使用Kubernetes部署Nginx服务,包括创建Deployment和Service,以及通过NodePort实现外部访问。通过实践操作,展示了从配置文件到验证访问的全过程。

1、创建deployment

[root@master ~]# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

kubectl create -f nginx-deployment.yaml

2、创建service

[root@master ~]# cat nginx-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels: 
   name: my-nginx
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
    nodePort: 30088
  selector:
    run: my-nginx

kubectl create -f nginx-svc.yaml
3、查看pod和svc

[root@master ~]# kubectl get po -o wide
NAME                        READY   STATUS             RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
busybox1                    4/4     Running            0          32d    10.244.1.14   node1    <none>           <none>
my-nginx-75897978cd-p6p79   1/1     Running            0          2d2h   10.244.1.25   node1    <none>           <none>
my-nginx-75897978cd-z67ch   1/1     Running            0          2d2h   10.244.0.9    master   <none>           <none>
mypod                       1/1     Running            0          39d    10.244.1.10   node1    <none>           <none>
test-pod                    1/2     CrashLoopBackOff   571        2d1h   10.244.1.30   node1    <none>           <none>
volume-pod                  2/2     Running            0          25h    10.244.1.31   node1    <none>           <none>
[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP        42d
my-nginx     NodePort    10.1.35.73   <none>        80:30088/TCP   6m2s

4、主机ip是10.0.0.4,验证下能否访问,修改了一台nginx的首页

[root@master ~]# curl 10.0.0.4:30088
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master ~]# curl 10.0.0.4:30088
hello

### Kubernetes NodePort 服务配置与使用 在 Kubernetes 中,`NodePort` 是一种服务类型,允许外部流量通过集群节点的 IP 地址和指定端口访问服务。该服务类型在 `ClusterIP` 的基础上,为服务分配一个集群内部可访问的端口,并在所有节点上开放该端口,从而实现外部访问的能力。 要创建一个 `NodePort` 类型的服务,可以使用 `kubectl expose` 命令,或者通过 YAML 文件定义服务。以下是一个使用 YAML 定义的 `NodePort` 服务示例: ```yaml apiVersion: v1 kind: Service metadata: name: nginx-nodeport spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30080 ``` 上述配置中: - `type: NodePort` 指定了服务类型为 `NodePort`。 - `selector` 指定了该服务将流量路由到带有 `app: nginx` 标签的 Pod。 - `port` 是服务内部的端口。 - `targetPort` 是 Pod 上容器监听的端口。 - `nodePort` 是在每个节点上开放的端口,外部流量可以通过该端口访问服务[^4]。 一旦服务被创建,Kubernetes 将自动分配一个默认端口范围内的端口(通常为 30000-32767),除非显式指定 `nodePort` 字段。如果未指定,Kubernetes 会自动选择一个可用端口。 在使用 `NodePort` 服务时需要注意以下几点: 1. **端口冲突**:由于 `NodePort` 在所有节点上开放相同的端口,因此需要确保所选端口未被其他服务占用。 2. **安全性**:直接暴露服务到外部网络可能会带来安全风险,建议结合使用 Ingress 控制器和 TLS 终止来增强安全性。 3. **负载均衡**:`NodePort` 服务本身不具备负载均衡能力,但可以通过外部负载均衡器与 `NodePort` 结合使用,以实现更高级的流量管理功能[^4]。 此外,`NodePort` 服务适用于需要直接从外部网络访问服务的场景,例如测试环境或小型部署。对于生产环境,通常推荐使用 `LoadBalancer` 类型的服务,它提供了更高级别的网络抽象和更好的可扩展性。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值