问题描述
我创建了一个示例spring boot应用程序,并执行了以下操作:-
1。创建一个docker映像
2。创建了一个Azure容器注册表,并做了docker push
3。在Azure Kubernetes服务中创建一个群集并成功部署它。为此,我选择了外部终结点选项。
说说服务呼叫,我不想使用http://20.37.134.68:80之类的IP,但是另一个自定义名称该怎么办? 另外,如果我选择了Internal,那么有什么办法可以替换名称。 尝试使用端点名称属性编辑YAML,但失败了。有任何想法吗?
解决方法
我认为您混淆了一些概念,因此我将尽力解释并帮助您实现所需的目标。
- 在Kubernetes集群中部署容器映像时,在大多数情况下,您将使用
pod
或deployment
规范,该规范基本上是一个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
(默认),这意味着只有您的集群才能到达Pod。要从其他吊舱获得服务,可以使用由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
,因此这意味着您只能使用此名称访问您的应用程序。
创建入口之后,您可以使用命令kubectl get ing
查看外部ip,并且可以在dns服务器中创建A条目。