用自定义名称替换kubernetes中的IP地址
Replacing ip address in kubernetes with custom name
我创建了一个示例 spring 引导应用程序并执行了以下操作:-
1.created一张docker图片
2.created 一个 Azure 容器注册表并docker 推送到这个
3.Created Azure Kubernetes 服务中的集群并部署了它 successfully.I 为此选择了外部端点选项。
Kubernetes external end point
说服务到服务调用我不想使用像 http://20.37.134.68:80 这样的 IP 但另一个自定义名称我该怎么做?
另外,如果我选择内部,那么有什么方法可以替换名称。
尝试使用端点名称 属性 编辑 YAML 但有 failed.Any 个想法?
我觉得你混淆了一些概念,所以我会尽力解释并帮助你达到你想要的。
- 当你在 Kubernetes 集群中部署容器镜像时,在大多数情况下你会使用
pod
or deployment
规范,它基本上是一个包含所有 deployment/pod 配置、名称、镜像的 yaml 文件名称等。这是一个简单的 echo-server 应用程序示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo
spec:
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: echo
image: mendhak/http-https-echo
ports:
- name: http
containerPort: 80
观察文件中的字段 name
。您可以在此处为部署和容器配置名称。
对于内部服务,您需要使用服务类型ClusterIP
(默认),这意味着只有您的集群会到达pods。要从其他 pods 访问您的服务,您可以使用由 my-svc.my-namespace.svc.cluster-domain.example
组成的 service name。
以下是上述部署的服务示例:
apiVersion: v1
kind: Service
metadata:
name: echo-svc
spec:
selector:
app: echo
ports:
- protocol: TCP
port: 80
targetPort: 80
- 要向外部公开您的服务,您可以选择使用服务类型
NodePort
、LoadBalancer
或使用 ingress
.
您可以在入口规则中配置您的 DNS 名称,并根据需要制定路径规则,甚至可以为您的应用程序配置 HTTPS。 kubernetes 中的入口选项很少,最受欢迎的选项之一是 nginx-ingress
.
这是一个如何为我们的示例服务配置简单入口的示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "false"
name: echo-ingress
spec:
rules:
- host: myapp.mydomain.com
http:
paths:
- path: "/"
backend:
serviceName: echo-svc
servicePort: 80
在示例中,我使用的是 dns 名称 myapp.mydomain.com
,这意味着您只能通过此名称访问您的应用程序。
创建ingress后,可以通过命令kubectl get ing
查看外网ip,也可以在自己的dns服务器中创建一个A入口
我创建了一个示例 spring 引导应用程序并执行了以下操作:-
1.created一张docker图片
2.created 一个 Azure 容器注册表并docker 推送到这个
3.Created Azure Kubernetes 服务中的集群并部署了它 successfully.I 为此选择了外部端点选项。
Kubernetes external end point
说服务到服务调用我不想使用像 http://20.37.134.68:80 这样的 IP 但另一个自定义名称我该怎么做? 另外,如果我选择内部,那么有什么方法可以替换名称。 尝试使用端点名称 属性 编辑 YAML 但有 failed.Any 个想法?
我觉得你混淆了一些概念,所以我会尽力解释并帮助你达到你想要的。
- 当你在 Kubernetes 集群中部署容器镜像时,在大多数情况下你会使用
pod
ordeployment
规范,它基本上是一个包含所有 deployment/pod 配置、名称、镜像的 yaml 文件名称等。这是一个简单的 echo-server 应用程序示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo
spec:
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: echo
image: mendhak/http-https-echo
ports:
- name: http
containerPort: 80
观察文件中的字段 name
。您可以在此处为部署和容器配置名称。
对于内部服务,您需要使用服务类型ClusterIP
(默认),这意味着只有您的集群会到达pods。要从其他 pods 访问您的服务,您可以使用由 my-svc.my-namespace.svc.cluster-domain.example
组成的 service name。
以下是上述部署的服务示例:
apiVersion: v1
kind: Service
metadata:
name: echo-svc
spec:
selector:
app: echo
ports:
- protocol: TCP
port: 80
targetPort: 80
- 要向外部公开您的服务,您可以选择使用服务类型
NodePort
、LoadBalancer
或使用ingress
.
您可以在入口规则中配置您的 DNS 名称,并根据需要制定路径规则,甚至可以为您的应用程序配置 HTTPS。 kubernetes 中的入口选项很少,最受欢迎的选项之一是 nginx-ingress
.
这是一个如何为我们的示例服务配置简单入口的示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "false"
name: echo-ingress
spec:
rules:
- host: myapp.mydomain.com
http:
paths:
- path: "/"
backend:
serviceName: echo-svc
servicePort: 80
在示例中,我使用的是 dns 名称 myapp.mydomain.com
,这意味着您只能通过此名称访问您的应用程序。
创建ingress后,可以通过命令kubectl get ing
查看外网ip,也可以在自己的dns服务器中创建一个A入口