## 一、K8S服务访问方式

### 1. 概述
Kubernetes(简称K8S)是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。在K8S中,服务访问是非常重要的一个环节,通过服务访问可以实现服务之间的通信和调用。本文将介绍K8S中的服务访问方式,并通过代码示例演示如何实现。

### 2. K8S服务访问方式步骤
在K8S中,实现服务访问主要包括以下几个步骤,如下表所示:

| 步骤 | 描述 |
| ---- | ---- |
| 1 | 创建一个Deployment和Service |
| 2 | 获取Service的Cluster IP |
| 3 | 在同一个Namespace内部访问Service |
| 4 | 在不同Namespace内部访问Service |
| 5 | 通过NodePort方式访问Service |
| 6 | 通过Ingress方式访问Service |

### 3. 代码示例
#### 步骤1:创建一个Deployment和Service

首先,我们需要创建一个Deployment和Service,示例代码如下:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
```

#### 步骤2:获取Service的Cluster IP

通过以下命令获取Service的Cluster IP:
```bash
kubectl get svc nginx-service
```

#### 步骤3:在同一个Namespace内部访问Service

在同一个Namespace内部访问Service,可以直接通过Service名访问,示例代码如下:
```java
String serviceUrl = "http://nginx-service:80";
```

#### 步骤4:在不同Namespace内部访问Service

在不同Namespace内部访问Service,需要指定Service的Namespace,示例代码如下:
```java
String serviceUrl = "http://nginx-service.namespace.svc.cluster.local:80";
```

#### 步骤5:通过NodePort方式访问Service

通过NodePort方式暴露Service,可以通过Node的IP和NodePort访问Service,示例代码如下:
```java
String nodeIp = "Node_IP_Address";
int nodePort = 30001;
String serviceUrl = "http://" + nodeIp + ":" + nodePort;
```

#### 步骤6:通过Ingress方式访问Service

通过Ingress方式访问Service,首先需要创建Ingress资源,然后配置域名和路径,示例代码如下:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: example.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: nginx-service
port:
number: 80
```

### 4. 总结
通过以上步骤,我们可以实现不同的K8S服务访问方式,包括同一Namespace内部访问、不同Namespace内部访问、NodePort方式访问和Ingress方式访问。每种方式都适用于不同的场景,开发者可以根据实际需求选择合适的访问方式来实现服务之间的通信和调用。希望本文对新手开发者有所帮助!