apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx app.kubernetes.io/version: 1.6.4 name: ingress-nginx-controller namespace: ingress-nginx spec: externalTrafficPolicy: Local ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - appProtocol: http name: http port: 80 protocol: TCP targetPort: http - appProtocol: https name: https port: 443 protocol: TCP targetPort: https selector: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx type: NodePort 指定targetPort
时间: 2024-03-07 13:52:48 浏览: 22
在上述配置中,targetPort 是用来指定 Service 要代理的后端 Pod 的端口号。在这个例子中,Service 会将请求代理到后端 Pod 的 80 端口(targetPort: http)或 443 端口(targetPort: https)。这里的 targetPort 要与后端 Pod 中监听的端口一致,如果不一致,请求就无法到达后端 Pod。
相关问题
no matches for kind "TCPProxy" in version "projectcontour.io/v1"
抱歉,我之前提到的 `TCPProxy` 资源可能不是 Project Contour 的最新版本。根据最新的 Project Contour 文档,TCPProxy 的 API 版本已更新为 `projectcontour.io/v1beta1`。
请按照以下步骤在 Kubernetes 中部署 Project Contour 并定义 TCPProxy:
1. 配置 Contour 的 RBAC 和服务账号:
创建 `contour.yaml` 文件,并添加以下内容:
```yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: projectcontour
labels:
app.kubernetes.io/name: contour
app.kubernetes.io/instance: projectcontour
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: contour
namespace: projectcontour
rules:
- apiGroups:
- ""
resources:
- service
- endpoints
- secrets
verbs:
- get
- list
- watch
- apiGroups:
- "extensions"
resources:
- ingress
verbs:
- get
- list
- watch
- apiGroups:
- "networking.k8s.io"
resources:
- ingresses
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: contour
namespace: projectcontour
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: contour
subjects:
- kind: ServiceAccount
name: contour
namespace: projectcontour
```
使用以下命令来创建命名空间和配置 RBAC:
```bash
kubectl apply -f contour.yaml
```
2. 安装 Contour:
使用以下命令来安装 Contour:
```bash
kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
```
这将创建 Contour 的 Deployment 和 Service。
3. 定义 TCPProxy:
创建一个名为 `tcpproxy.yaml` 的文件,并添加以下内容:
```yaml
apiVersion: projectcontour.io/v1beta1
kind: TCPProxy
metadata:
name: example-tcpproxy
namespace: projectcontour
spec:
virtualhost:
fqdn: example.com
routes:
- services:
- name: backend-service
port: 80
```
在上面的示例中,我们定义了一个名为 `example-tcpproxy` 的 TCPProxy 资源,将来自 `example.com` 的 TCP 连接转发到名为 `backend-service` 的服务的端口 80。
使用以下命令来创建 TCPProxy:
```bash
kubectl apply -f tcpproxy.yaml
```
4. 验证部署:
使用以下命令来验证 Contour 和 TCPProxy 的部署是否成功:
```bash
kubectl get all -n projectcontour
kubectl get tcpproxy -n projectcontour
```
确保所有相关的资源都处于运行状态。
请注意,根据你使用的 Project Contour 版本,可能需要适当调整 YAML 文件中的 API 版本和资源类型。请参考 Project Contour 的文档和示例进行适配。
k8s v1.23.17 演示ingress, svc, deployment nginx 示例
好的,我可以为您提供一个简单的示例来演示如何使用 Kubernetes 中的 Ingress、Service 和 Deployment 部署 Nginx Web 服务器。
首先,您需要创建一个 Deployment,用来部署 Nginx Web 服务器:
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20.1
ports:
- containerPort: 80
```
接下来,您需要创建一个 Service,用来暴露 Nginx Web 服务器的端口:
```
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
```
现在,您可以使用 Ingress 来暴露 Nginx Web 服务器的端口,使其可以通过公共 IP 地址访问:
```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
name: http
```
在上面的示例中,使用了 host 属性来指定要使用的域名,使用 path 属性来指定要使用的路径。您可以根据需要添加多个规则来支持不同的域名和路径。
最后,您可以使用 kubectl 命令来将上述 YAML 文件部署到 Kubernetes 集群中:
```
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
kubectl apply -f nginx-ingress.yaml
```
现在,您可以在浏览器中输入您指定的域名和路径来访问 Nginx Web 服务器了。